.NET 5.0升级后serilog-sinks-file无法生成滚动日志问题求助
问题根因及修复方案
你遇到的无法生成滚动日志、SelfLog无内容的问题由以下几个配置/代码错误导致,按优先级修复即可:
1. 缺失Serilog.Sinks.File的注册与依赖
- 你在配置中使用了
Filesink,但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、控制台程序的最后一行)添加该调用。
修复后验证步骤
- 重新编译运行程序,主动调用
Log.Information("测试日志")写入一条测试日志 - 正常退出程序触发Flush,查看是否生成对应日期的滚动日志文件
内容的提问来源于stack exchange,提问作者phil123456
相关产品推荐
相关产品推荐

