我们正在与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 回答
您需要直接在
<logger>
元素上使用过滤器,或者使用允许更复杂条件的子项<filters> config element .例如 . (假设您可以使用 Logger 的名称):
<filter> elements允许更大的灵活性,但仍然相当有限 . 最终你可以用custom conditions扩展NLog .