1. 结构化日志的好处
- 易于检索
- 易于分析统计
2. 应用场景
- 实现日志预警
- 实现上下文的关联
- 实现与追踪系统的集成
3. Nuget安装包
Serilog
Serilog.AspNetCore
4. 实现代码
public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public static int Main(string[] args)
{
//让Serilog可以接替整个默认的日志记录框架
Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(Configuration)
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.Console(new RenderedCompactJsonFormatter())
.WriteTo.File(formatter: new CompactJsonFormatter(), "log\\myapp.txt", rollingInterval: RollingInterval.Day,fileSizeLimitBytes:1024*1024*10)
.CreateLogger();
try
{
Log.Information("开始启动服务");
CreateHostBuilder(args).Build().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, $"服务启动异常:{ex.ToString()}");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseKestrel().UseUrls("http://*:8001").UseStartup<Startup>();
})
//注册UseSerilog,dispose设置为true会在退出时帮我们释放我们的日志对象
.UseSerilog(dispose: true);
}
5. 配置文件
备注1:Serilog 与 Logging 在同一层。
备注2:MinimumLevel,最小日志级别输出
备注3:Override 是用来重载Logging定日的日志级别
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Error",
"System": "Information"
}
}
},