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

.NET Core 6使用Serilog.Sinks.File无法生成日志,.NET Core 5正常

问题:.NET Core 6中Serilog无法生成日志文件

我在.NET Core 5中使用Serilog.Sinks.File可以正常生成日志,配置和代码如下:

.NET Core 5 配置与代码

Startup.cs 代码

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
    Log.Logger = new LoggerConfiguration()
      .ReadFrom.Configuration(Configuration)
      .CreateLogger();
    loggerFactory.AddSerilog();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
}

appsettings.json 配置

"Serilog": {
  "MinimumLevel": "Information",
  "Override": {
    "Microsoft": "Warning"
  },
  "Using": [
    "Serilog.Sinks.File"
  ],
  "WriteTo": [
    {
      "Name": "RollingFile",
      "Args": {
        "pathFormat": "C:\\logs\\myapi\\log-{Date}.txt"
      }
    }
  ]
}

使用的NuGet包

<PackageReference Include="Serilog.Extensions.Logging" Version="3.1.0" />
<PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" />
<PackageReference Include="Serilog.Sinks.RollingFile" Version="3.3.0" />

迁移到.NET Core 6后,保留appsettings.json配置不变,在Program.cs中使用以下代码,但无法生成日志文件:

var logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Configuration)
  .Enrich.FromLogContext()
  .CreateLogger();

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(logger);

解决方案

1. 移除废弃的Serilog.Sinks.RollingFile包

Serilog.Sinks.RollingFile已被官方废弃,Serilog.Sinks.File从v5版本开始已内置滚动文件功能,无需再引用该旧包,直接从项目中移除对应的NuGet引用即可。

2. 修改appsettings.json中的Serilog配置

将原配置中WriteTo节点的RollingFile改为File,并调整参数格式:

"Serilog": {
  "MinimumLevel": "Information",
  "Override": {
    "Microsoft": "Warning"
  },
  "Using": [
    "Serilog.Sinks.File"
  ],
  "WriteTo": [
    {
      "Name": "File",
      "Args": {
        "path": "C:\\logs\\myapi\\log-.txt",
        "rollingInterval": "Day",
        "retainedFileCountLimit": 30
      }
    }
  ]
}

参数说明:

  • path: 日志文件基础路径,Serilog会自动追加日期后缀
  • rollingInterval: 滚动周期,可选值包括Year/Month/Day/Hour/Minute
  • retainedFileCountLimit: 保留的日志文件最大数量,按需设置

3. 修正.NET 6 Program.cs代码

确保静态Log.Logger被正确赋值(若使用静态Log类输出日志),并添加程序退出时的Serilog清理逻辑:

var builder = WebApplication.CreateBuilder(args);

// 配置Serilog
Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(builder.Configuration)
    .Enrich.FromLogContext()
    .CreateLogger();

builder.Logging.ClearProviders();
builder.Logging.AddSerilog(Log.Logger);

var app = builder.Build();

// 程序停止时关闭Serilog,确保日志写入完成
app.Lifetime.ApplicationStopped.Register(Log.CloseAndFlush);

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}

app.Run();

4. 检查日志目录权限

确认应用程序对C:\\logs\\myapi目录拥有读写权限,生产环境中需注意IIS或托管账户的权限配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:05:25