如何用Serilog.Expressions 5.0.0过滤Quartz.NET重复日志?
问题解决方法
Serilog.Expressions 5.0.0对表达式语法做了调整,移除了属性名前的@前缀,同时推荐通过日志源(SourceContext)做精准过滤,既解决配置失效问题,也能提升日志处理性能。
方案1:适配新语法修改原有消息过滤
直接把原表达式里的@Message改为Message即可,修改后的Filter配置如下:
"Filter": [ { "Name": "ByExcluding", "Args": { "expression": "Contains(Message, 'Batch acquisition of')" } } ]
方案2:更精准的日志源+消息过滤(推荐)
Quartz的"Batch acquisition of"日志来自Quartz.Core.QuartzSchedulerThread类,直接针对这个日志源过滤,性能更优:
"Filter": [ { "Name": "ByExcluding", "Args": { "expression": "SourceContext = 'Quartz.Core.QuartzSchedulerThread' and Message contains 'Batch acquisition of'" } } ]
完整修改后的appsettings.json配置示例
{ "Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Expressions" ], "MinimumLevel": { "Default": "Debug", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "Filter": [ { "Name": "ByExcluding", "Args": { "expression": "SourceContext = 'Quartz.Core.QuartzSchedulerThread' and Message contains 'Batch acquisition of'" } } ], "WriteTo": [ { "Name": "Console" }, { "Name": "File", "Args": { "path": "Logs/log-.txt", "rollingInterval": "Day" } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ] } }
内容的提问来源于stack exchange,提问作者Val
相关产品推荐
相关产品推荐

