You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过NLog正确格式化带缩进的多行日志消息?

NLog多行日志统一缩进解决方案

核心问题分析

你遇到的重复空格问题,大概率是原消息中的换行符格式不统一(Windows的\r\n vs Unix的\n),或是原消息换行后自带空白字符,导致replace-newlines的简单替换叠加了多余空格。padding功能是对整个日志块做对齐,不适合多行逐行缩进的场景。

实用配置方案

方案1:用replace-newlines精准替换(兼容多系统换行)

直接指定换行后添加固定缩进,利用NLog内置的${newline}变量适配系统换行:

<target name="file" xsi:type="File" fileName="logs/${shortdate}.log">
  <layout xsi:type="SimpleLayout">
    ${longdate} [${level:uppercase=true}] ${replace-newlines:inner=${message}:replacement=${newline}    }
  </layout>
</target>
  • 这里${newline} 表示换行后添加4个空格缩进,可根据需求调整空格数量。
  • 优势:配置简单,自动适配系统换行符,不会出现跨平台格式问题。

方案2:用regex布局渲染器精准控制(处理原消息自带空白的情况)

如果原消息的换行后已经有不确定数量的空白字符,用正则替换统一缩进:

<target name="file" xsi:type="File" fileName="logs/${shortdate}.log">
  <layout xsi:type="SimpleLayout">
    ${longdate} [${level:uppercase=true}] ${regex:inner=${message}:searchPattern=(\r?\n)\s*:replacePattern=$1    }
  </layout>
</target>
  • 正则(\r?\n)\s*匹配所有换行(兼容\r\n和\n)及其后的任意空白字符。
  • 替换为$1 保留原换行符,再添加固定4个空格缩进,彻底消除原消息的混乱空白。

验证方法

测试时可以构造带换行的日志消息,比如:

logger.Info(new MyObject { Name = "Test", Details = "Line1\n  Line2\r\nLine3" });

查看日志文件输出,确认除第一行外,所有后续行都保持统一的缩进格式,无重复空格。

内容的提问来源于stack exchange,提问作者sla89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:52:18