NLog整合ExceptionLess如何映射当前用户身份

在将NLog与Exceptionless集成时,要映射当前用户的身份,我们可以使用NLog的布局渲染器(Layout Renderer)和Exceptionless的上下文数据(Context Data)。

首先,在NLog的配置文件中,我们需要定义一个自定义的布局渲染器来获取当前用户的身份信息。例如,我们可以创建一个名为"currentuser"的布局渲染器。在该布局渲染器的实现中,我们可以访问当前用户的身份信息,并返回相应的值。

接下来,配置Exceptionless的客户端,将当前用户的身份信息添加到Exceptionless的上下文数据中。可以使用ExceptionlessClient.Default获取客户端实例,并使用SetUserDescription方法设置用户的身份信息。在这个例子中,我们将使用NLog布局渲染器中获取的当前用户身份信息。

下面是一个示例配置文件和代码:

NLog配置文件:

<target xsi:type="Exceptionless" name="exceptionlessTarget" serverUrl="https://your-exceptionless-url.com" apiKey="YOUR_API_KEY" /> <layout xsi:type="JsonLayout"> <attribute name="time" layout="${date}" /> <attribute name="level" layout="${level:upperCase=true}" /> <attribute name="message" layout="${message}" /> <attribute name="currentuser" layout="${currentuser}" /> </layout> <rules> <logger name="*" minlevel="Trace" writeTo="exceptionlessTarget" /> </rules>

定义自定义布局渲染器:

[LayoutRenderer("currentuser")] public class CurrentUserLayoutRenderer : LayoutRenderer { protected override void Append(StringBuilder builder, LogEventInfo logEvent) { // 获取当前用户身份信息的逻辑 // 将身份信息写入 builder 中 } }

设置Exceptionless的用户身份信息:

var client = ExceptionlessClient.Default; client.SetUserDescription(NLog.LogManager.GetLogger("Example").Factory.GetCurrentClassLogger().Info("${currentuser}").ToString());

在上述示例中,我们将自定义布局渲染器命名为"currentuser",并在NLog的布局中使用${currentuser}来引用它。我们在自定义布局渲染器的Append方法中获取当前用户的身份信息并将其写入日志内容中。

然后,我们使用NLog的GetCurrentClassLogger()方法获取当前类的日志记录器,并通过${currentuser}来获取当前用户的身份信息。最后,使用Exceptionless的SetUserDescription方法将用户身份信息设置到Exceptionless的上下文数据中。

这样,当NLog记录日志时,Exceptionless将自动收集日志,包括当前用户的身份信息。

通过以上设置后,我们登录ExceptionlessUI发现,用户信息有些还是为空:

image

除了上面通过代码设置的用户信息可以显示外,其它正常NLog输入用户信息都没有,此时我可以修改一下NLog配置文件:

<target xsi:type="Exceptionless" name="exceptionlessTarget" serverUrl="https://your-exceptionless-url.com" apiKey="YOUR_API_KEY" userIdentity="${aspnet-user-identity}" />

布局中增加顶级的属性: userIdentity="${aspnet-user-identity}",就可以自动映射MVC或者WebAPI里面的Session信息或者用户登录账号了:

image

会话事件也可以自动聚合了:

image

2023.1.8更新

默认情况下,EXceptionless UI里面的用户会自动读取 HttpContext.User?.Identity.Name属性值,因此我们在登录构造凭证Claims的时候,记得赋值2个通用属性即可:

new Claim(ClaimTypes.Name,userData.DispName), new Claim(ClaimTypes.NameIdentifier,userData.LoginAccount)


__EOF__

本文作者pccai
本文链接https://www.cnblogs.com/pccai/p/17865192.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   pccai  阅读(47)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2010-11-29 如何使用Oracle VM VirtualBox作SharePoint2010开发?
点击右上角即可分享
微信分享提示