将值传递给nlog自定义目标

时间:2013-06-12 09:59:41

标签: c# asp.net asp.net-mvc logging nlog

我创建了一个自定义的nLog目标,除了一件事之外它正在工作。 我想将登录的人名传递给目标,我创建了一个名为ApplicationUser的属性,它将获取值。

目标定义如下所示:

<target name="MemoryTrace" 
        xsi:type="CustomTraceListener" 
        ApplicationUser="${identity:authType=False:isAuthenticated=False}"  />

但是当customTarget收到ApplicationUser的值时,它不会被解析为登录的人名,它只会保持为${identity:authType=False:isAuthenticated=False}

这完全符合nLog documentation

我已经对其他目标进行了测试,并得到了解决。我需要做什么才能将其解析为用户名?

1 个答案:

答案 0 :(得分:4)

您需要使用ApplicationUser类型定义Layout,然后您可以使用ApplicationUser.Render(logevent)为“当前用户”提供“渲染布局”:

[Target("CustomTraceListener")]
public sealed class MyFirstTarget : TargetWithLayout
{

    public Layout ApplicationUser { get; set; }

    protected override void Write(LogEventInfo logEvent)
    {
        string logMessage = this.Layout.Render(logEvent);
        string applicationUser = ApplicationUser.Render(logEvent);
        // ... Write where you want
    }
}