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

如何让NLog在日志文件中插入实际换行而非\r\n转义字符?

解决NLog日志中Environment.NewLine被转义为\r\n的问题

问题出在你使用了JsonLayout——JSON规范要求字符串中的换行符必须转义为\r\n,所以哪怕配置了${message:raw=true},JSON序列化过程还是会把实际换行转成转义序列。

针对JSON日志文件(jsonFile目标)

如果一定要在JSON日志里插入实际换行符(直接换行,不转义),需要关闭NLog对message字段的JSON编码:

修改JsonLayout里的message属性配置,加上encode="false":

<attribute name="message" layout="${message:raw=true}" encode="false" />

⚠️ 注意:这么做会生成不符合JSON规范的文件,因为JSON字符串不允许包含未转义的换行、双引号或反斜杠。如果日志消息包含这些特殊字符,会直接破坏JSON结构,导致无法正常解析。只适合日志消息干净、仅用于人工查看的场景。

针对普通文本日志文件(txtFile目标)

如果是想在普通txt日志里看到实际换行,只需要把日志规则指向txtFile目标就行,默认布局会保留消息里的换行:

修改rules节点:

<rules>
  <logger name="*" minlevel="Error" writeTo="jsonFile,txtFile" />        
</rules>

此时txt日志里的消息会显示成:

Failed to do stuff
Try again later

要是需要自定义txt日志的格式,可以显式指定布局:

<target name="txtFile" xsi:type="File" fileName="${logDirectory}/${shortdate}.txt">
  <layout type="SimpleLayout" layout="${date:format=yyyy-MM-dd HH\:mm\:ss} ${level:uppercase=true} ${message}" />
</target>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:35:32