首页 文章

NLog如何在不同的场景中使用不同的JSON布局格式将消息记录到控制台

提问于
浏览
0

我们正在与NLog合作 . 我们需要在不同的场景中使用不同的JSON格式将消息记录到控制台 .

Ex: If exception occurred 以下是格式

{
            “id”:”5656”,
            “uuid”:”xdd895-65454”,
            “key”:”somekeyname”,
            “message”: “** exception message **”,
            “stack_trace”: “”**exception stack trace**”
}

If Normal log message

{
            "id":"8898998"
            “messge”: “Time taken to retrieve data from database”
            “Time”: “1100” (in milli seconds)
}

像这样我们有10个场景 .

Approach 1: 我尝试在nlog部分的web.config文件中创建不同的目标,如下所示

<target xsi:type="Console" name="console_exception" >
    <layout xsi:type="JsonLayout">
      <attribute name="id" layout="${mdlc:itemid}" />
      <attribute name="uuid" layout="${mdlc:item=uuid}" />
      <attribute name="loglevel" layout="${level}" />
      <attribute name="timestamp" layout="${date}" />
      <attribute name="message" layout="${message}" />
    </layout>
  </target>
  <target xsi:type="Console" name="console_databaseTimeTaken" >
    <layout xsi:type="JsonLayout">
      <attribute name="id" layout="${mdlc:item=id}" />
      <attribute name ="custommessage" layout="Time taken to retrieve data from database"/>
      <attribute name="timestamp" layout="${date}" />
      <attribute name="message" layout="${message}" />
    </layout>
  </target>
  <rules>
  <logger name="*" minLevel="Trace" writeTo ="console"/>
</rules>

我不知道如何以编程方式设置目标和布局 . 到目前为止,我已经找到了基于条件的日志记录,但这不是一个好方法 .

Approach 2: 在记录消息时,我们根据需要手动格式化字符串消息,然后调用log方法

string logmessag= string.Format("\"id\":\"{0}\",\"messge\": {1}\"\",\"Time\": \"{2}(in milli seconds)\"", id, message, time);

使用的技术:Webapi2,Nlog 4.0.3 IDE:VS2017让我们知道解决此问题的最佳方法提前感谢

1 回答

  • 1

    您需要直接在 <logger> 元素上使用过滤器,或者使用允许更复杂条件的子项<filters> config element .

    例如 . (假设您可以使用 Logger 的名称):

    <rules>
      <logger name='DB' minLevel="Trace" writeTo="console_databaseTimeTaken" final="true" />
      <logger name='Error' minLevel="Trace" writeTo="console_exception" final="true" />
      …
    </rules>
    

    <filter> elements允许更大的灵活性,但仍然相当有限 . 最终你可以用custom conditions扩展NLog .

相关问题