首页 > 解决方案 > 带有非格式化消息的 JsonLayout

问题描述

我对 JsonLayout 没什么问题

NLog 版本:4.7.10 平台:netcoreapp 3.1

当前的 Nlog 配置

<target name="jsonFileMw" xsi:type="File" fileName="logs\mw.log"
            archiveAboveSize="10240"
            maxArchiveDays="5"
            archiveNumbering="DateAndSequence"
            archiveEvery="Day"
            enableArchiveFileCompression="true">
      <layout xsi:type="JsonLayout" includeAllProperties="true">
        <attribute name="time" layout="${longdate}" />
        <attribute name="level" layout="${level:upperCase=true}"/>
        <attribute name="message" layout="${message}" />
      </layout>
    </target>

我的日志记录代码 _logger.LogInformation("request received. {RequestUrl} {RequestBody}", "some url", "some body"); 此日志记录代码产生以下日志行:

{ "time": "2021-08-02 15:07:30.8198", "level": "INFO", "message": "request received. some url some body", "RequestUrl": "some url", "RequestBody": "some body" }

如您所见,这会将日志属性添加到消息中,这也意味着两次记录相同的信息。结果日志文件大小增加。我只想保持消息简单。所需的输出如下:

{ "time": "2021-08-02 15:07:30.8198", "level": "INFO", "message": "request received. {RequestUrl} {RequestBody}", "RequestUrl": "some url", "RequestBody": "some body" }

我怎样才能做到这一点?

标签: nlog

解决方案


你可以这样做:

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

另见:https ://github.com/NLog/NLog/wiki/Message-Layout-Renderer

另请参阅:https ://github.com/NLog/NLog/wiki/How-to-use-structured-logging#output-captured-properties


推荐阅读