Exceptionless初尝笔记

安装

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

然后再Program.cs中配置

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收集日志并查看,其它高级功能和特性等需要使用时在研究研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值