如何将CorrelationManager.ActivityId记录为一个单独的字段?
下面是我当前的NLog.config:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="logDirectory" value="${basedir}/Logs" />
<extensions>
<add assembly="NLog.Mongo"/>
</extensions>
<targets>
<target xsi:type="Mongo"
name="mongoCustom"
includeDefaults="false"
connectionString="mongodb://localhost/FooLogging"
collectionName="authLogs">
<field name="Date" layout="${longdate:universalTime=true}" />
<field name="Level" layout="${level}"/>
<field name="Message" layout="${message}" />
<field name="Logger" layout="${logger}"/>
<field name="Exception" layout="${exception:format=tostring}" />
<field name="ThreadID" layout="${threadid}" />
<field name="ThreadName" layout="${threadname}" />
<field name="ProcessID" layout="${processid}" />
<field name="ProcessName" layout="${processname:fullName=true}" />
<field name="UserName" layout="${windows-identity}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="mongoCustom" />
</rules>
</nlog>发布于 2014-04-26 17:50:42
目前还没有支持CorrelationManager.ActivityId的内置版本。
但是,您可以创建自己的布局呈现,以输出它:
[LayoutRenderer("activityid")]
public class ActivityIdLayoutRenderer : LayoutRenderer
{
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
builder.Append(Trace.CorrelationManager.ActivityId.ToString());
}
}您还需要在以下网站注册:
ConfigurationItemFactory.Default.LayoutRenderers
.RegisterDefinition("activityid", typeof(ActivityIdLayoutRenderer));然后,您可以在目标定义中使用它:
<target xsi:type="Mongo">
<!-- ... -->
<field name="ActivityId" layout="${activityid}" />
</target>作为另一种解决方案,您还可以使用事件上下文布局呈现器输出任何自定义属性,如ActivityId,但在本例中,您每次登录时都必须包含它。
发布于 2016-08-10 01:25:37
在NLog v4.1中添加了${activityid}。https://github.com/nlog/nlog/wiki/Trace-Activity-Id-Layout-Renderer
https://stackoverflow.com/questions/23313627
复制相似问题