.NET 6 中如何使用 WebApplicationBuilder 配置 Serilog 日志组件
.NET 6 基于 WebApplicationBuilder 配置 Serilog 方案
前置准备
首先安装 NuGet 依赖包:
Serilog.AspNetCore(建议使用适配 .NET 6 的最新稳定版本)
完整配置方案(和 .NET 5 原有逻辑完全对齐,支持捕获启动阶段异常)
该写法保留了你之前 .NET 5 代码中捕获启动致命错误、日志全局刷入的能力,是官方推荐的标准写法:
// 最先初始化启动阶段用的日志,避免启动早期日志丢失 Log.Logger = new LoggerConfiguration() .Enrich.FromLogContext() .WriteTo.Console() // 可额外添加其他需要的日志输出端,比如文件、Seq等 .CreateBootstrapLogger(); try { Log.Information("应用启动中"); var builder = WebApplication.CreateBuilder(args); // 注册Serilog到主机 builder.Host.UseSerilog((context, loggerConfig) => { // 读取配置文件中的Serilog配置,也可以直接硬编码配置 loggerConfig .ReadFrom.Configuration(context.Configuration) .Enrich.FromLogContext() .WriteTo.Console(); }); // 此处添加你自己的其他服务注册逻辑,比如AddControllers、AddSwaggerGen等 builder.Services.AddControllers(); var app = builder.Build(); // 可选:添加Serilog请求日志中间件,自动记录接口请求日志 app.UseSerilogRequestLogging(); // 此处添加你自己的中间件配置逻辑,比如UseRouting、UseAuthorization等 app.UseRouting(); app.UseAuthorization(); app.MapControllers(); app.Run(); } catch (Exception ex) { Log.Fatal(ex, "应用启动失败"); } finally { Log.CloseAndFlush(); }
简化配置方案(无需捕获启动异常场景)
如果你的项目不需要捕获启动阶段的异常,可以直接在builder构建阶段完成配置,代码更简洁:
var builder = WebApplication.CreateBuilder(args); // 直接配置Serilog Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(builder.Configuration) .Enrich.FromLogContext() .WriteTo.Console() .CreateLogger(); builder.Host.UseSerilog(); // 其他服务注册逻辑 builder.Services.AddControllers(); var app = builder.Build(); app.UseSerilogRequestLogging(); // 其他中间件配置 app.UseRouting(); app.UseAuthorization(); app.MapControllers(); app.Run();
配置文件示例
如果要使用appsettings.json管理Serilog配置,可以添加如下配置节点,代码中调用ReadFrom.Configuration即可自动读取:
{ "Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "Console" }, { "Name": "File", "Args": { "path": "logs/log-.txt", "rollingInterval": "Day", "retainedFileCountLimit": 30 } } ] } }
内容的提问来源于stack exchange,提问作者Miguel Moura
相关产品推荐
相关产品推荐

