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

.NET 8 Worker Service中如何结合HostApplicationBuilder使用Serilog?

在.NET 8中使用HostApplicationBuilder集成Serilog

前置准备

确保已安装Serilog.AspNetCore NuGet包,若需控制台、文件等日志输出目标,额外安装对应Sink包(如Serilog.Sinks.Console、Serilog.Sinks.File)。

代码修改步骤

.NET 8默认模板使用HostApplicationBuilder,替换默认日志系统为Serilog的操作如下:

  1. 在Program.cs中,创建HostApplicationBuilder后配置Serilog并替换默认日志提供器:
var builder = Host.CreateApplicationBuilder(args);

// 从配置文件读取Serilog设置并初始化日志实例
Serilog.Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .CreateLogger();

// 清除默认日志提供器,添加Serilog作为唯一日志实现
builder.Logging.ClearProviders();
builder.Logging.AddSerilog();

// 继续原有服务配置(如MVC、数据库服务等)
builder.Services.AddControllers();

var host = builder.Build();

// 增加启动/异常日志处理,保证日志完整性
try
{
    Log.Information("应用启动中");
    await host.RunAsync();
}
catch (Exception ex)
{
    Log.Fatal(ex, "应用意外终止");
}
finally
{
    Log.CloseAndFlush();
}
  1. 在配置文件(如appsettings.json)中添加Serilog配置示例:
{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "./logs/app-log-.txt",
          "rollingInterval": "Day",
          "retainedFileCountLimit": 30
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName" ]
  }
}

关键说明

  • 调用ClearProviders()是为了移除.NET默认日志提供器,避免日志重复输出;
  • ReadFrom.Configuration(builder.Configuration)会自动读取配置文件中Serilog节点的规则,无需硬编码日志逻辑;
  • 程序退出前必须调用Log.CloseAndFlush(),确保所有待写入日志都被持久化。

内容的提问来源于stack exchange,提问作者giorgi02

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:36:03