如何记录到事件属性而不将它们放在消息中?

How log to event properties without placing them in the message?

我目前使用 NLog 登录 Json 格式。我想在我的日志中的“eventProperties”下记录事件参数,而不将它们包含在消息属性中。

当前 nlog.config:

<target name="jsonFile" xsi:type="Console">
  <layout xsi:type="JsonLayout">
    <attribute name="time" layout="${longdate}" />
    <attribute name="level" layout="${level:upperCase=true}"/>
    <attribute name="message" layout="${message}" />
    <attribute name="eventProperties" encode="false" >
      <layout xsi:type='JsonLayout' includeAllProperties="true"  maxRecursionLimit="6"/>
    </attribute>
  </layout>
</target>

目前调用它:

_logger.LogDebug(20, "Doing hard work! {logInfo}", t2);

记录以下内容:

{ "time": "2022-05-19 08:24:15.1395", "level": "DEBUG", "message": "Doing hard work! Test", "eventProperties": { "logInfo": {"MyProperty":"Hello2", "MyProperty2":"Testing2", "MyModel":{"MyProperty":"Hello", "MyProperty2":"Testing"}}, "EventId": 20 } }

但是,我希望能够在不阻止 t2 被记录到 JSON:

的 eventProperties 部分的情况下使用以下内容进行记录
_logger.LogDebug(20, "Doing hard work!", t2);

消息 属性 的输出不再包含 test

"message": "Doing hard work!"

如何在不从 eventProperties 中删除消息的情况下从消息中删除 属性?

编辑 - 我正在为 .LogDebug()

使用 Microsoft ILogger 抽象

您可以使用 raw=true:

输出 message-template(而不是格式化消息)
    <attribute name="message" layout="${message:raw=true}" />

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

另请参阅:https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-properties-with-Microsoft-Extension-Logging