问题描述
serilog的Kinda新手,但想做一些非常简单的事情,例如:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.@R_556_4045@ion()
.Filter.ByExcluding("Could not find file")
.Writeto.File("SimplePlayerApartment-.log",rollingInterval: RollingInterval.Day,retainedFileCountLimit: 1)
.CreateLogger();
我想到Filter.ByExclusion将使我不记录其中包含某些关键字/短语的行。取而代之的是,无论我能找到什么文档,它似乎都是基于名称空间,类和各种奇特的事物而排他的,而我所想要的只是过滤掉一个简单的字符串或2。
有什么办法可以做我想要的吗?如上面的代码示例所述,它将引发很大的运行时错误。
解决方法
Filter.ByExcluding
是谓词Func<LogEvent,bool>
,因此您需要给它一个函数,该函数返回是否应该排除日志事件...
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.Filter.ByExcluding(e => e.MessageTemplate.Text.Contains("Could not find file")) // <#<#<#<
.WriteTo.File("SimplePlayerApartment-.log",rollingInterval: RollingInterval.Day,retainedFileCountLimit: 1)
.CreateLogger();
var fileName = "file.ext";
Log.Information("Hello");
Log.Information("Could not find file {fileName}",fileName); // Excluded from the log
Log.Information("Bye");
值得一提的是,上面的示例基于消息模板应用了过滤器,该消息模板(暗示)是呈现之前的模板,因此e.MessageTemplate.Text
将是Could not find file {fileName}
而不是{{1} }。