结构化日志的好处
- 易于检索
- 易于分析统计
场景举例
- 实现日志告警
- 实现上下文的关联
- 实现追踪系统集成
示例
首先我们新建Web程序👉选择API模板
改造Program类
using Microsoft.AspNetCore.Hosting;using Microsoft.Extensions.Configuration;using Microsoft.Extensions.Hosting;using Serilog;using Serilog.Formatting.Compact;using System;using System.IO;namespace LoggingSerilogDemo{public class Program{public static IConfiguration Configuration { get; } = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", false, true).AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json").AddEnvironmentVariables().Build();public static int Main(string[] args){Log.Logger = new LoggerConfiguration()// 将配置的值传递给Serilog的提供程序.ReadFrom.Configuration(Configuration).MinimumLevel.Debug().Enrich.FromLogContext().WriteTo.Console(new RenderedCompactJsonFormatter()).WriteTo.File(formatter: new CompactJsonFormatter(), "Logs\\Myapp.txt", rollingInterval: RollingInterval.Day).CreateLogger();try{Log.Information("Starting wen host");CreateHostBuilder(args).Build().Run();return 0;}catch (Exception exception){Log.Fatal(exception, "Host terminated unexpectedly");return 1;}finally{Log.CloseAndFlush();}}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();}).UseSerilog(dispose: true);}}
修改appsetting.json配置文件
{"Logging": {"LogLevel": {"Default": "Information","Microsoft": "Warning","Microsoft.Hosting.Lifetime": "Information"}},"Serilog": {"MinimumLevel": {"Default": "Information","Override": {"Microsoft": "Error","System": "Information"}}},"AllowedHosts": "*"}
