Serilog配置问题:EF日志与应用日志分离失败
问题排查与修复方案
核心问题分析
EF日志未生成的原因
全局日志级别覆盖配置中,Microsoft.EntityFrameworkCore被设为Error级别:"Override": { "Microsoft": "Warning", "Microsoft.EntityFrameworkCore": "Error" }EF的常规操作日志(如SQL执行、变更跟踪)默认是
Information级别,该配置会过滤掉所有低于Error级别的EF日志,导致无EF日志输出。日志重复的可能原因
第一个文件Sink的路径存在笔误:"Logs/WrathForged.Auth.log..log"包含多余的小数点,可能导致文件名解析异常,引发重复写入问题。
修正后的配置
"Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Exceptions", "Serilog.Sinks.Async", "Serilog.Expressions" ], "MinimumLevel": { "Default": "Debug", "Override": { "Microsoft": "Warning", "Microsoft.EntityFrameworkCore": "Information" // 修改为Information,捕获EF常规日志 } }, "WriteTo": [ { "Name": "Console", "Args": { "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}", "filter": [ { "Name": "ByExcluding", "Args": { "expression": "StartsWith(SourceContext, 'Microsoft.EntityFrameworkCore')" } } ] } }, { "Name": "Async", "batchSizeLimit": 100, "period": "00:00:02", "Args": { "configure": [ { "Name": "File", "Args": { "rollingInterval": "Day", "path": "Logs/WrathForged.Auth.log", // 修正路径,移除多余小数点 "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact", "filter": [ { "Name": "ByExcluding", "Args": { "expression": "StartsWith(SourceContext, 'Microsoft.EntityFrameworkCore')" } } ] } } ] } }, { "Name": "Async", "batchSizeLimit": 100, "Args": { "configure": [ { "Name": "File", "Args": { "path": "Logs/WrathForged.Auth.DatabaseLogs.log", // 同样修正路径格式 "rollingInterval": "Day", "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact", "filter": [ { "Name": "ByIncludingOnly", "Args": { "expression": "StartsWith(SourceContext, 'Microsoft.EntityFrameworkCore')" } } ] } } ] } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId", "WithExceptionDetails" ] }
额外验证点
- 确保已安装
Serilog.ExpressionsNuGet包,否则过滤表达式无法生效。 - 如果需要捕获更详细的EF日志(如敏感数据、参数值),可将
Microsoft.EntityFrameworkCore的级别设为Debug,并在EF配置中开启详细日志:builder.LogTo(...) // 确保EF日志已接入Serilog管道 .EnableSensitiveDataLogging(); // 可选,用于查看参数值
内容的提问来源于stack exchange,提问作者JBurlison
相关产品推荐
相关产品推荐

