问题 将当前用户添加到NLog输出


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

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


12190
2017-11-19 17:23


起源



答案:


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。


11
2017-11-19 20:22



我的身份验证基于表单身份验证。有什么建议吗? - Shahar
那是ASP.NET吗?我没有使用它进行任何开发,但NLog有几个可用于检索ASP.NET参数的LayoutRenderers,包括UserIdentity。 - wageoghe
对于其他人来说,现在是NLog.Web,而不是NLog.Extended - Daniel Crenna
如果 ${aspnet-user-identity} 是空的 ?!我可以分配 HttpContext.Current.User.Identity.Name 直接? - Muflix
背后的代码 ${aspnet-user-identity} 只是检索 HttpContext.Current.User.Identity.Name,所以我不希望直接获得名称产生任何不同的东西。 - wageoghe


答案:


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。


11
2017-11-19 20:22



我的身份验证基于表单身份验证。有什么建议吗? - Shahar
那是ASP.NET吗?我没有使用它进行任何开发,但NLog有几个可用于检索ASP.NET参数的LayoutRenderers,包括UserIdentity。 - wageoghe
对于其他人来说,现在是NLog.Web,而不是NLog.Extended - Daniel Crenna
如果 ${aspnet-user-identity} 是空的 ?!我可以分配 HttpContext.Current.User.Identity.Name 直接? - Muflix
背后的代码 ${aspnet-user-identity} 只是检索 HttpContext.Current.User.Identity.Name,所以我不希望直接获得名称产生任何不同的东西。 - wageoghe