如何让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
相关产品推荐
相关产品推荐

