.NET 6中Serilog生成空文件问题求助
Serilog日志文件为空的问题排查与修复
核心错误点
- Sink添加时机错误:你在创建
Log.Logger实例后,才给LoggerConfiguration追加WriteTo.File和WriteTo.Console配置,但已创建的Log.Logger不会同步后续的配置修改,导致日志没有输出到目标文件。 - 配置文件JSON不完整:提供的Serilog配置缺少闭合的大括号,会导致配置读取失败,示例配置应补充完整结构。
- 主机初始化与Logger赋值顺序颠倒:构建AspNetHost时调用
UseSerilog(),但此时Log.Logger尚未初始化,主机可能使用默认配置而非自定义的Logger实例。
修正后的配置文件
{ "Serilog": { "MinimumLevel": { "Default": "Verbose", "Override": { "Microsoft": "Warning", "System": "Warning" } } } }
修正后的代码
' 构建配置实例 Dim config = builder.Build() ' 先完成LoggerConfiguration的所有配置(包含Sink) Dim LoggerConfiguration = New LoggerConfiguration(). ReadFrom.Configuration(config). Enrich.FromLogContext(). WriteTo.File("test.txt"). WriteTo.Console() ' 初始化全局Log.Logger Log.Logger = LoggerConfiguration.CreateLogger() ' 再构建主机,确保UseSerilog()使用已配置好的Logger Dim AspNetHost = Host.CreateDefaultBuilder(). ConfigureServices(Sub(X, Y) ConfigureDI(X, Y) End Sub). UseSerilog(). Build() ' 输出日志,此时会写入文件和控制台 Log.Logger.Information("start") ' 关闭日志并刷新缓冲区 Log.CloseAndFlush()
可选优化:配置驱动Sink
如果你希望通过配置文件管理输出目标,可在JSON中添加WriteTo节点,这样代码中无需手动调用WriteTo.File/WriteTo.Console:
{ "Serilog": { "MinimumLevel": { "Default": "Verbose", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "File", "Args": { "path": "test.txt" } }, { "Name": "Console" } ] } }
对应的简化代码:
Dim config = builder.Build() Dim LoggerConfiguration = New LoggerConfiguration(). ReadFrom.Configuration(config). Enrich.FromLogContext() Log.Logger = LoggerConfiguration.CreateLogger() Dim AspNetHost = Host.CreateDefaultBuilder(). ConfigureServices(Sub(X, Y) ConfigureDI(X, Y) End Sub). UseSerilog(). Build() Log.Logger.Information("start") Log.CloseAndFlush()
内容的提问来源于stack exchange,提问作者Viacheslav Dev
相关产品推荐
相关产品推荐

