JsonLayout с не отформатированным сообщением

#nlog

Вопрос:

У меня мало проблем с JsonLayout

Версия NLog: 4.7.10 Платформа: netcoreapp 3.1

Текущая конфигурация Nlog

 <target name="jsonFileMw" xsi:type="File" fileName="logsmw.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" }

Как я могу этого достичь?

Комментарии:

1. См. также: github.com/NLog/NLog/issues/4510

Ответ №1:

Вы можете это сделать:

 <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