NLog 如何在不同场景下使用不同 JSON 布局格式将消息记录到控制台
NLog how to log messages to console with different JSON layout formats in different scenarios
我们正在使用 NLog。我们需要在不同的场景中使用不同的 JSON 格式将消息记录到控制台。
Ex: 如果发生异常 下面是格式
{
“id”:”5656”,
“uuid”:”xdd895-65454”,
“key”:”somekeyname”,
“message”: “** exception message **”,
“stack_trace”: “”**exception stack trace**”
}
如果日志消息正常
{
"id":"8898998"
“messge”: “Time taken to retrieve data from database”
“Time”: “1100” (in milli seconds)
}
像这样我们有10个场景。
方法一:
我尝试在 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>
我不知道如何以编程方式设置目标和布局。
到目前为止,我已经找到了基于条件的日志记录,但这不是一个好方法。
方法二:
记录消息时,我们根据需要手动格式化字符串消息,然后调用日志方法
string logmessag= string.Format("\"id\":\"{0}\",\"messge\": {1}\"\",\"Time\": \"{2}(in milli seconds)\"", id, message, time);
使用的技术:Webapi2、Nlog 4.0.3
IDE:VS2017
让我们知道解决这个问题的最佳方法
提前致谢
您需要使用过滤器,可以直接在 <logger>
元素上使用,也可以在允许更复杂条件的子元素 <filters>
config element 上使用。
例如。 (假设您可以使用记录器的名称):
<rules>
<logger name='DB' minLevel="Trace" writeTo="console_databaseTimeTaken" final="true" />
<logger name='Error' minLevel="Trace" writeTo="console_exception" final="true" />
…
</rules>
<filter>
elements allow more flexibility, but are still fairly limited. Ultimately you can extend NLog with custom conditions.
我们正在使用 NLog。我们需要在不同的场景中使用不同的 JSON 格式将消息记录到控制台。
Ex: 如果发生异常 下面是格式
{
“id”:”5656”,
“uuid”:”xdd895-65454”,
“key”:”somekeyname”,
“message”: “** exception message **”,
“stack_trace”: “”**exception stack trace**”
}
如果日志消息正常
{
"id":"8898998"
“messge”: “Time taken to retrieve data from database”
“Time”: “1100” (in milli seconds)
}
像这样我们有10个场景。
方法一: 我尝试在 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>
我不知道如何以编程方式设置目标和布局。 到目前为止,我已经找到了基于条件的日志记录,但这不是一个好方法。
方法二: 记录消息时,我们根据需要手动格式化字符串消息,然后调用日志方法
string logmessag= string.Format("\"id\":\"{0}\",\"messge\": {1}\"\",\"Time\": \"{2}(in milli seconds)\"", id, message, time);
使用的技术:Webapi2、Nlog 4.0.3 IDE:VS2017 让我们知道解决这个问题的最佳方法 提前致谢
您需要使用过滤器,可以直接在 <logger>
元素上使用,也可以在允许更复杂条件的子元素 <filters>
config element 上使用。
例如。 (假设您可以使用记录器的名称):
<rules>
<logger name='DB' minLevel="Trace" writeTo="console_databaseTimeTaken" final="true" />
<logger name='Error' minLevel="Trace" writeTo="console_exception" final="true" />
…
</rules>
<filter>
elements allow more flexibility, but are still fairly limited. Ultimately you can extend NLog with custom conditions.