aspnetcore使用serilog日志

博客 动态
0 320
羽尘
羽尘 2022-02-19 14:55:33
悬赏:0 积分 收藏

aspnetcore 使用serilog日志

而在实际项目开发中,使用第三方日志框架来记录日志也是非常多的,首先一般基础的内置日志记录器在第三方日志框架中都有实现,然后很多第三方日志框架在功能上更强大和丰富,能满足我们更多的项目分析和诊断的需求。常用的有log4net,更复杂的elk,项目中有用到exceptionless。下面说的是serilog:

首先建个aspnetcorewebapi6.0的项目

安装组件:

Seq — centralized structured logs for .NET, Java, Node.js (datalust.co)

using Serilog;using Serilog.Events;// Setup serilog in a two-step process. First, we configure basic logging// to be able to log errors during ASP.NET Core startup. Later, we read// log settings from appsettings.json. Read more at// https://github.com/serilog/serilog-aspnetcore#two-stage-initialization.// General information about serilog can be found at// https://serilog.net/Log.Logger = new LoggerConfiguration()            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)            .Enrich.FromLogContext()            .WriteTo.Console()            .CreateBootstrapLogger();try{    Log.Information("Starting the web host");    var builder = WebApplication.CreateBuilder(args);    // Full setup of serilog. We read log settings from appsettings.json    builder.Host.UseSerilog((context, services, configuration) => configuration        .ReadFrom.Configuration(context.Configuration)        .ReadFrom.Services(services)        .Enrich.FromLogContext());    // Add services to the container.    builder.Services.AddControllers();    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle    builder.Services.AddEndpointsApiExplorer();    builder.Services.AddSwaggerGen();    var app = builder.Build();    // Configure the HTTP request pipeline.    app.UseSerilogRequestLogging(configure =>    {        configure.MessageTemplate = "HTTP {RequestMethod} {RequestPath} ({UserId}) responded {StatusCode} in {Elapsed:0.0000}ms";    });    // Configure the HTTP request pipeline.    if (app.Environment.IsDevelopment())    {        app.UseSwagger();        app.UseSwaggerUI();    }    app.UseHttpsRedirection();    app.UseAuthorization();    app.MapControllers();    app.Run();}catch(Exception ex){    Log.Fatal(ex, "Host terminated unexpexctedly");}finally{    Log.CloseAndFlush();}
{  //"Logging": {  //  "LogLevel": {  //    "Default": "Information",  //    "Microsoft.AspNetCore": "Warning"  //  }  //},  "Serilog": {    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq" ],    "MinimumLevel": "Information",    // Where do we want to write our logs to? Choose from a large number of sinks:    // https://github.com/serilog/serilog/wiki/Provided-Sinks.    "WriteTo": [      {        "Name": "Console"      },      {        "Name": "File",        "Args": { "path": "Logs/log.txt" }      },      {        "Name": "Seq",        "Args": { "serverUrl": "http://localhost:8888" }      }    ],    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],    "Properties": {      "Application": "AspNetCoreSerilogDemo"    }  },  "AllowedHosts": "*"}

运行结果如下,已替换系统自带information:

 

请求跟踪分析:

using Microsoft.AspNetCore.Mvc;namespace AspNetCoreSerilogDemo.Controllers{    [ApiController]    [Route("[controller]")]    public class SeriLogDemoController : ControllerBase    {               private readonly ILogger<SeriLogDemoController> _logger;        public SeriLogDemoController(ILogger<SeriLogDemoController> logger)        {            _logger = logger;        }        [HttpGet]        public string String()        {            _logger.LogInformation("this is serilog...");            return "Suscess";        }         }}

 配置文件里面输出路径有"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Seq" ],所以同样会输出到日志文件中,指定路径和文件名:

 

更多更详细功能参考:

Serilog — simple .NET logging with fully-structured events

Seq — centralized structured logs for .NET, Java, Node.js (datalust.co)

示例代码:

exercise/AspNetCoreSerilogDemo at master · liuzhixin405/exercise (github.com)

Fork me on GitHub
posted @ 2022-02-19 13:25 星仔007 阅读(1) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员