Asp.Net Core使用Exceptionless日志服务3-使用Feature Usages做审计日志
Asp.Net Core使用Exceptionless日志服务3-使用Feature Usages做审计日志
Exceptionless系列目录
Asp.Net Core使用Exceptionless日志服务1-搭建Exceptionless容器 - SunnyTrudeau - 博客园 (cnblogs.com)
Asp.Net Core使用Exceptionless日志服务2-集成Exceptionless.NLog - SunnyTrudeau - 博客园 (cnblogs.com)
项目中需要对用户修改部分重要数据的行为进行记录,如果要求不高的话,是可以集成在日志功能里边的,我称之为审计日志。
Exceptionless系统能够收集4大类的日志:Exception 、LogMessage、Broken Links 、Feature Usages。
- Exception是异常日志,比如Logger.Error带有ex参数记录的日志。
- LogMessage是普通日志,比如Logger.Info,Logger.Warnning记录的日志,Logger.Error不含ex参数记录的日志。
- Broken Links是访问路由不存在,404错误的日志。
- Feature Usages是自定义日志,不能通过Logger.xxx和NLog配置提交,必须通过Exceptionless提供的函数提交。
可以直接把审计日志记录在LogMessage中,日志内容带有【审计日志】之类的关键字,然后在Exceptionless网页中查找。这个方法很简单,使用框架集成的ILogger接口即可,只有一点不太好,就是审计日志跟大量的普通日志保存在一起,要查找。
还有一个方式,就是采用Feature Usages类型提交审计日志,便于查看。ILogger接口无法提交日志为Feature Usages类型,必须调用Exceptionless组件的ExceptionlessClient静态方法。
编写审计日志记录器
初始化时配置好ExceptionlessClient项目秘钥和Exceptionless地址。然后就可以通过ExceptionlessClient提交自定义日志类型信息了。
D:\Software\gitee\testexceptionless\Data\AuditLogger.cs
public class AuditLogger { public AuditLogger() { ExceptionlessClient.Default.Configuration.ServerUrl = "https://www.myweb.cn:8811";
ExceptionlessClient.Default.Configuration.ApiKey = "xxx"; } /// <summary> /// 保存审计日志 /// </summary> /// <param name="msg"></param> /// <param name="userName"></param> public void SaveAuditLog(string msg, string? userName) { //需要注册HttpContextAccessor,获取当前用户名 //userName ??= _httpContextAccessor.HttpContext?.User?.Identity?.Name; //Exceptionless组件提交到FeatureUsage类型。 //SetType("[审计日志]"),会变成普通日志,不会提交到FeatureUsage类型。 string info = $"[审计日志]: {msg}"; ExceptionlessClient.Default.CreateFeatureUsage(info).SetUserIdentity(userName).SetMessage(msg).Submit(); } }
然后在初始化时注册服务
D:\Software\gitee\testexceptionless\Program.cs
//注册审计日志记录器 builder.Services.AddSingleton<AuditLogger>();
测试
沿用之前的测试项目,在天气预报页面提交审计日志
D:\Software\gitee\testexceptionless\Data\WeatherForecastService.cs
public Task<WeatherForecast[]> GetForecastAsync(DateOnly startDate) { //_logger.LogDebug($"Debug获取了天气预报{startDate}"); _logger.LogInformation($"Info1获取了天气预报{startDate}"); _logger.LogWarning($"Warn获取了天气预报{startDate}"); //_logger.LogError(new Exception("测试错误"), $"获取了天气预报{startDate}"); //_logger.LogInformation($"Info2获取了天气预报{startDate}"); //保存审计日志 _auditLogger.SaveAuditLog("获取了天气预报", "张三"); return Task.FromResult(Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = startDate.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Summaries[Random.Shared.Next(Summaries.Length)] }).ToArray()); }
访问Exceptionless网页,在【Feature Usages】-【Feature Events】页面,可以看到上传的审计日志。
DEMO代码地址:https://gitee.com/woodsun/testexceptionless
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?