我目前正在使用NLog.Web包在我的应用程序中编写.Net日志。
在阅读NLog.Web之后,我注意到与${windows-identity}
布局渲染器不同,${aspnet-user-identity}
布局渲染器没有为其提供域参数。
例如,如果我想记录当前正在运行的Windows身份,则会注销:domain\user
,但在指定domain=false
时,它只会记录用户。
如何使用${aspnet-user-identity}
实现此类功能?因为当我配置${aspnet-user-identity:domain=false}
时,它不起作用。
答案 0 :(得分:1)
NLog中使用的WindowsIdentity.Name
将始终提供全名,包括域名。
登录名称的格式为DOMAIN \ USERNAME。
我认为您需要一个自定义布局渲染器,并在/
上手动拆分。
像这样:(也许还为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的帮助