首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用CorrelationManager.ActivityId记录NLog

如何用CorrelationManager.ActivityId记录NLog
EN

Stack Overflow用户
提问于 2014-04-26 16:27:25
回答 2查看 4.4K关注 0票数 5

如何将CorrelationManager.ActivityId记录为一个单独的字段?

下面是我当前的NLog.config:

代码语言:javascript
复制
<?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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-26 17:50:42

目前还没有支持CorrelationManager.ActivityId的内置版本。

但是,您可以创建自己的布局呈现,以输出它:

代码语言:javascript
复制
[LayoutRenderer("activityid")]
public class ActivityIdLayoutRenderer : LayoutRenderer
{
    protected override void Append(StringBuilder builder, LogEventInfo logEvent)
    {
        builder.Append(Trace.CorrelationManager.ActivityId.ToString());
    }
}

您还需要在以下网站注册:

代码语言:javascript
复制
 ConfigurationItemFactory.Default.LayoutRenderers
      .RegisterDefinition("activityid", typeof(ActivityIdLayoutRenderer));

然后,您可以在目标定义中使用它:

代码语言:javascript
复制
<target xsi:type="Mongo">
      <!-- ... -->
      <field name="ActivityId" layout="${activityid}" />
</target>

作为另一种解决方案,您还可以使用事件上下文布局呈现器输出任何自定义属性,如ActivityId,但在本例中,您每次登录时都必须包含它。

票数 4
EN

Stack Overflow用户

发布于 2016-08-10 01:25:37

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23313627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档