.NET Core 6中Serilog无法写入文件日志问题求助
.NET Core 6 Serilog控制器日志无输出排查方案
1. 核对Program.cs里Serilog的注册顺序
必须在builder.Build()前完成Serilog配置并替换默认日志系统,顺序错了控制器会用默认日志而非Serilog:
正确流程:
- 先加载配置(比如读取appsettings.json)
- 配置Serilog
- 调用
builder.Host.UseSerilog() - 最后执行
var app = builder.Build();
2. 检查控制器的Logger注入是否正确
控制器构造函数必须注入ILogger<你的控制器类>,不能手动实例化:
public class TestController : ControllerBase { private readonly ILogger<TestController> _logger; public TestController(ILogger<TestController> logger) { _logger = logger; } }
要是自己new Logger实例,肯定用不上你配置的Serilog。
3. 检查appsettings.json的日志级别配置
确认日志级别没过滤掉你要输出的内容:
{ "Serilog": { "MinimumLevel": { "Default": "Information", // 这里得设为Information及以下,不然LogInformation打不出来 "Override": { "Microsoft": "Warning", "Microsoft.AspNetCore": "Warning", "System": "Warning" } }, "WriteTo": [ // 你的输出目标配置 ] } }
注意Override里别把你控制器的命名空间设成了更高级别(比如Warning),不然控制器的Information日志会被过滤。
4. 确认Serilog的输出目标配置没限制级别
启动日志能输出不代表所有级别都能输出,检查WriteTo里有没有限制最低级别:
比如这种配置会只输出Error及以上,LogInformation就打不进去:
"WriteTo": [ { "Name": "File", "Args": { "path": "logs/log-.txt", "rollingInterval": "Day", "restrictedToMinimumLevel": "Error" } } ]
要么把restrictedToMinimumLevel改成Information,要么加一个专门处理Information级别的输出配置。
5. 排查是否有自定义日志过滤规则
检查Program.cs里有没有加过滤控制器日志的代码,比如:
builder.Logging.AddFilter("你的项目命名空间.Controllers", LogLevel.None);
这种代码会直接屏蔽控制器的所有日志,删掉就行。
6. 修复NuGet包可能的损坏问题
虽然你装的版本和.NET Core 6兼容,但还是可以尝试清理缓存重装:
- 删除项目下的bin、obj文件夹
- 运行
dotnet restore重新恢复包
内容的提问来源于stack exchange,提问作者Deus Ex Machina
相关产品推荐
相关产品推荐

