NLog Web - 没有域的AspNet-User-Identity

时间:2018-03-25 12:20:26

标签: asp.net nlog

我目前正在使用NLog.Web包在我的应用程序中编写.Net日志。 在阅读NLog.Web之后,我注意到与${windows-identity}布局渲染器不同,${aspnet-user-identity}布局渲染器没有为其提供域参数。

例如,如果我想记录当前正在运行的Windows身份,则会注销:domain\user,但在指定domain=false时,它只会记录用户。

如何使用${aspnet-user-identity}实现此类功能?因为当我配置${aspnet-user-identity:domain=false}时,它不起作用。

2 个答案:

答案 0 :(得分:1)

NLog中使用的WindowsIdentity.Name将始终提供全名,包括域名。

  

登录名称的格式为DOMAIN \ USERNAME。

https://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.name(v=vs.110).aspx

我认为您需要一个自定义布局渲染器,并在/上手动拆分。

像这样:(也许还为outOfIndex添加soms检查)

using NLog.LayoutRenderers;

....

//register ${my-aspnet-user-identity}
LayoutRenderer.Register("my-aspnet-user-identity",
              (logEvent) => HttpContext.Current?.User?.Identity?.Name?.Split('/')[1]);

尽快注册。

答案 1 :(得分:0)

我找到了另一种方法来解决这个问题@Julian

在NLog.config文件中,我创建了一个变量:

<variable name="aspnetIdentity" value="${replace:searchFor=^\\w+\\\\:replaceWith=:regex=true:inner=${aspnet-user-identity}}" />

如变量中所定义,正则表达式搜索至少一个单词(在开头)并最终搜索反斜杠。 写入其他反斜杠是为了转义特殊字符,也是双反斜杠。最后,找到的内容(这是域名)将被替换为空字符串,因此我只获得用户名而不是域\用户名

感谢@Julian的帮助