是否可以按词组过滤?

问题描述

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} }。