将当前用户添加到NLog输出

时间:2013-11-19 17:23:47

标签: c# nlog

我想在NLog输出的每一行添加一个字符串。逻辑保持不变,尝试获取当前用户,如果成功,则将当前用户添加到输出。

我知道如何每次都实现它,但我想在一个地方设置这个模板,而不是在每次写作时重复它。

3 个答案:

答案 0 :(得分:14)

WindowsIdentityLayoutRenderer应该可以给你你想要的东西。您可以选择记录域,用户名或两者。

您可以在NLog.config文件中配置类似的(未经测试):

<targets>
    <target name="file" xsi:type="File" 
        layout="${longdate} | ${level} | ${logger} | ${windows-identity} | ${message}"
        fileName="${basedir}/${shortdate}.log" />
</targets>

这可能不适用于低权限环境。

您现在如何获得用户名?如果你得到这样的东西:

HttpContext.Current.User.Identity.Name

然后你可以使用NLog的“aspnet-user-identity”LayoutRenderer,如下所示:

<targets>
    <target name="file" xsi:type="File" 
        layout="${longdate} | ${level} | ${logger} | ${aspnet-user-identity} | ${message}"
        fileName="${basedir}/${shortdate}.log" />
</targets>

NLog的aspnet * LayoutRenderers在NLog.Extended.sll中,因此除NLog.dll外还需要该dll。

答案 1 :(得分:0)

对于使用自定义authentication / authorization(或由于某些原因无法使用windows身份)且正在使用.NET core3.*)的用户您可以使用MappedDiagnosticsContext 注入自定义键值。

一旦知道用户的身份,就可以像这样设置它:

using NLog;
//...
MappedDiagnosticsContext.Set("UserName", "Some user name");

始终确保您以 Scoped 的方式执行此操作(使用.NET核心 Dependency Injection 术语或每个请求范围),因为您不想在登录时混淆用户。

然后在NLog配置中,您可以使用${mdc:UserName}语法读取值。

我正在使用以下nuget软件包:

  • nlog
  • nlog.web.aspnetcore

答案 2 :(得分:0)

NLog版本。 4.6.4引入了${environment-user},可在Windows和Linux上使用。解析为System.Environment.UserName

另请参阅:https://github.com/NLog/NLog/wiki/Environment-User-Layout-Renderer

对于ASP.NET应用程序,当前登录的用户身份也有${aspnet-user-identity}

另请参阅:https://github.com/NLog/NLog/wiki/AspNetUserIdentity-layout-renderer