Exceptionless初尝笔记

安装

简单试用了下Exceptionless本地部署并收集日志,在此记录下;
根据官方文档使用docker安装Exceptionless安装文档
在浏览器中输入http://ip:5000进行访问如能出现如下页面就证明安装成功,此处需注册之后才能登陆。

1、到github下载Exceptionless .net core版本,5.0.0及以后版本都是.net core版本,我下载的是6.0.0(windows系统)

2.下载下来解压,生成 (运行 dotnet restore,dotnet build)

3.在解压后的源码文件夹打开终端,运行 docker-compose up -d

4.有外网的环境下直接运行docker命令:docker run -d --rm -it -p 5000:80 exceptionless/exceptionless:latest 即可(前提是有安装elasticsearch和redis)

Docker - Exceptionless 

Exceptionless登陆

获取异常日志

只需要在startup中加入Exceptionless中间件就可以使用Exceptionless捕获项目中的异常信息,并在Exceptionless中查看,代码如下:

Install-Package Exceptionless.AspNetCore -Version 4.6.2
      public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "OptionApi", Version = "v1" });
            });
            //添加Exceptionless,从配置中读取创建项目的apikey和ServerUrl
            services.AddExceptionless(Configuration);
            //添加HttpContextAccessor可以在异常日志中获取到请求信息
            services.AddHttpContextAccessor();
        }
                public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "OptionApi v1"));
            }
            //使用
            app.UseExceptionless();

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
"Exceptionless": {
    "ApiKey": "1K0H0Zy0CpKf45bJmHiZp2mWyLtO5CIGOGmH2cgA",
    "ServerUrl": "http://192.168.74.5:5000" 
  } 
  • 自动捕获未处理的异常
    在action中直接抛出异常,Exceptionless中就可以记录到没有处理的异常信息
  •  [HttpGet("NoHandleException")]
            public IActionResult NoHandleException()
            {
                throw new Exception("NoHandleException抛出一个没有处理的异常");
            }
    

    异常

     异常

     Tip: 日志详情中请求tab需要添加services.AddHttpContextAccessor(); 才会显示

  • 手动提交已处理了的异常记录
  •         [HttpGet("HandleException")]
            public IActionResult HandleException()
            {
                try
                {
                    throw new ApplicationException(Guid.NewGuid().ToString());
                }
                catch (Exception ex)
                {
                   //SetProperty添加额外数据,AddTags添加标签
                   ex.ToExceptionless().SetProperty("userId",Guid.NewGuid()).AddTags("FirstTag").Submit();
                }
                return Ok("运行结束");
            }
    

    异常

     扩展

    手动推送已处理的异常记录可以设置更多额外信息,记录更丰富;

    推送其它日志信息到Exceptionless
    Exceptionless不仅可以记录异常日志,也可以把其它类日志推送到Exceptionless,要推送其它日志需要安装Exceptionless.Extensions.Logging包

  • Install-Package Exceptionless.Extensions.Logging -Version 4.6.2
    public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureLogging((context, loggerBuilder) =>
                    {
                        var config = context.Configuration;
                        var apiKey = config.GetSection("Exceptionless:ApiKey").Value;
                        var serverUrl = config.GetSection("Exceptionless:ServerUrl").Value;
                        var client = new ExceptionlessClient(configure =>
                        {
                            //key
                            configure.ApiKey = apiKey;
                            configure.ServerUrl = serverUrl;
                            //默认记录日志等级
                            configure.SetDefaultMinLogLevel(LogLevel.Trace);
                        });
                        //添加Exceptionless
                        loggerBuilder.AddExceptionless(client);
                    })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    

    然后在类中正常记录日志就可以,例如:

  •         private readonly ILogger<TestController> _logger;
            public TestController(ILogger<TestController> logger)
            {
                _logger = logger;
            }
            [HttpGet("NoHandleException")]
            public IActionResult NoHandleException()
            {
                _logger.LogDebug("NoHandleException这是一个debug日志");
                _logger.LogInformation("NoHandleException这是一个information 日志");
                _logger.LogWarning("NoHandleException这是一个Warning日志");
                _logger.LogError("NoHandleException这是一个Error日志");
                throw new Exception("NoHandleException抛出一个没有处理的异常");
            }
    

    info

     

     Tip: 此处日志记录是基于asp.netcore内置日志服务,所以要获取debug日志,需要把appsettings.json中logging配置等级改为Trace或Debug

  •   "Logging": {
        "LogLevel": {
          "Default": "Trace",
          "Microsoft": "Warning",
          "Microsoft.Hosting.Lifetime": "Warning"
        }
      },
    

    Serilog输出日志到Exceptionless
    Exceptionless也支持其它第三方日志组件输出日志到Exceptionless,使用Serilog测试一下,安装包Serilog.Extensions.Hosting和Serilog.Sinks.ExceptionLess
     

    Install-Package Serilog.Extensions.Hosting
    Install-Package Serilog.Sinks.ExceptionLess
    

    配置Serilog输出到Exceptionless

  •         public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureLogging((context, logBuilder) =>
                    {
                        var client = new ExceptionlessClient(c =>
                        {
                            c.ApiKey = "fBN6jdmUmSpKhmwa3F41h5db7CWvQAD3GVSsVCGm";
                            c.ServerUrl = "http://192.168.74.5:5000";
                            c.SetDefaultMinLogLevel(LogLevel.Trace);
                        });
                        Log.Logger = new LoggerConfiguration()
                            .MinimumLevel.Verbose()
                            .MinimumLevel.Override("Microsoft",LogEventLevel.Warning)
                            .MinimumLevel.Override("System", LogEventLevel.Warning)
                            .WriteTo.Exceptionless(additionalOperation:b=>
                        {
                            b.AddTags("Serilog Example");
                            b.SetProperty("全局值", "全局内容");
                            return b;
                        },client:client)
                        .CreateLogger();
                        logBuilder.AddSerilog(dispose: true);
                    })
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
    

    在控制器中输出日志

  •         [HttpGet("TestLog")]
            public ActionResult TestLog()
            {
                _logger.LogDebug("debug");
                _logger.LogInformation("information");
                _logger.LogWarning("warning");
                _logger.LogError("Error");
                return Ok("结束");
            }
    

    在Exceptionless中可以看到有日志消息显示:

  • serilog

    结语

    简单的体验了一把Exceptionless收集日志并查看,其它高级功能和特性等需要使用时在研究研究。

  • 转:Exceptionless初尝笔记_csdmwinter的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值