将值传递给日志自定义目标

本文关键字:自定义 目标 日志 值传 | 更新日期: 2023-09-27 18:18:04

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

目标定义如下:

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

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

这都是按照nLog文档

我已经在其他目标上测试了这个问题,它得到了解决。如何将其解析为用户名?

将值传递给日志自定义目标

你需要用Layout类型定义你的ApplicationUser,然后你可以使用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
    }
}