我创建了一个自定义的nLog目标,除了一件事之外它正在工作。
我想将登录的人名传递给目标,我创建了一个名为ApplicationUser
的属性,它将获取值。
目标定义如下所示:
<target name="MemoryTrace"
xsi:type="CustomTraceListener"
ApplicationUser="${identity:authType=False:isAuthenticated=False}" />
但是当customTarget收到ApplicationUser的值时,它不会被解析为登录的人名,它只会保持为${identity:authType=False:isAuthenticated=False}
。
这完全符合nLog documentation
我已经对其他目标进行了测试,并得到了解决。我需要做什么才能将其解析为用户名?
答案 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
}
}