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 LogMessageBroken Links Feature Usages

  • Exception是异常日志,比如Logger.Error带有ex参数记录的日志。
  • LogMessage是普通日志,比如Logger.InfoLogger.Warnning记录的日志,Logger.Error不含ex参数记录的日志。
  • Broken Links是访问路由不存在,404错误的日志。
  • Feature Usages是自定义日志,不能通过Logger.xxxNLog配置提交,必须通过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

 

posted on 2023-05-14 08:29  SunnyTrudeau  阅读(67)  评论(0编辑  收藏  举报