惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
小众软件
小众软件
美团技术团队
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
D
Docker
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
B
Blog
雷峰网
雷峰网
The Cloudflare Blog

博客园 - pccai

Matlab R2023b全家桶docker镜像下载 在Docker中安装GaussDB的ODBC驱动并添加Python测试代码 在Docker中安装PostgreSQL的ODBC驱动并添加Python测试代码 在Docker中安装MySQL的ODBC驱动并添加Python测试代码 在Docker中安装SQL Server的ODBC驱动并添加Python测试代码 Microsoft.AspNetCore.SignalR.Client中传送用户Token U8二次开发-钉钉集成 U8二次开发CO-基于Net8调用COM对象 Net7升级到Net8相关问题 .NET Core MemoryCache缓存批量获取Key或者删除 .NET中反射和动态表达式的分析和比较 SkiaSharp库在NetCore下跨平台图片操作基础使用方法 NetCore使用SkiaSharp库对给定路径的图片进行大小缩放,要适当考虑等比率缩放,以高度为准,宽度自适应 VS2022下nuget包同步失败,提示: PackageSourceMapping 已启用,未考虑以下源: ** SonarQube-7.7到9.9社区版本默认数据库H2连接方法 使用 pip 出现 Script file ‘C:\Anaconda3\Scripts\pip-script.py‘ is not present 错误解决办法 - pccai 让简易流行的FRP支持Nginx转发SSE“打字效果” 使用LxRunOffline迁移Windows10启用的WSL默认虚拟磁盘位置 MAUI开发迁移AVD默认位置释放C盘空间
NLog整合ExceptionLess如何映射当前用户身份
pccai · 2023-11-29 · via 博客园 - pccai

在将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)