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

.NET 5.0升级后serilog-sinks-file无法生成滚动日志问题求助

问题根因及修复方案

你遇到的无法生成滚动日志、SelfLog无内容的问题由以下几个配置/代码错误导致,按优先级修复即可:

1. 缺失Serilog.Sinks.File的注册与依赖

  • 你在配置中使用了File sink,但Using数组中仅注册了ApplicationInsights的sink,未添加Serilog.Sinks.File、Serilog.Sinks.Async的注册,同时请先确认你已安装以下NuGet包:
    • Serilog.Sinks.File(至少5.0.0以上适配.NET5的版本)
    • Serilog.Sinks.Async
  • 修复appsettings.logs.json的Using节点:
"Using": [
  "Serilog.Sinks.ApplicationInsights",
  "Serilog.Sinks.File",
  "Serilog.Sinks.Async"
],

2. File sink参数名错误

新版Serilog.Sinks.File的路径参数为path而非旧版的pathFormat,参数名错误会导致File sink初始化失败,修改对应配置:

"Args": {
  "path": "logs.txt", // 把pathFormat改成path
  // 其余参数保留
}

3. formatter与outputTemplate配置冲突

formatter和outputTemplate是互斥参数,指定formatter后outputTemplate会失效,如果你需要输出结构化JSON日志就保留formatter、删除outputTemplate配置;如果需要自定义文本格式就删除formatter配置,二选一即可。

4. SelfLog无内容的问题

你创建的文件流未开启自动刷新,日志内容会停留在缓冲区没有写入磁盘,修改CreateLogger中SelfLog初始化代码:

var file = File.CreateText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "serilog.txt"));
file.AutoFlush = true; // 新增这行开启自动刷新
Serilog.Debugging.SelfLog.Enable(TextWriter.Synchronized(file));

5. 缓冲区日志未落地的问题

你开启了File sink的buffered: true,同时用了Async异步写入,程序退出前必须主动调用Log.CloseAndFlush()来刷入所有缓冲区的日志,建议在程序退出逻辑(如Host的StopAsync、控制台程序的最后一行)添加该调用。

修复后验证步骤

  1. 重新编译运行程序,主动调用Log.Information("测试日志")写入一条测试日志
  2. 正常退出程序触发Flush,查看是否生成对应日期的滚动日志文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:48:03