You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:54:07