我真的不确定我错过了什么。 Serilog.Sinks.EventLog 的过滤根本不起作用。无论我在过滤器配置中尝试什么,所有内容都会被记录下来。我对表达式使用了旧语法、新 sytanx、不同属性等。
EventLog 是否支持过滤器?如果支持,我该如何解决这个问题?
这是我的 appsettings.json 文件的摘录。
...
{
"Name": "EventLog",
"Filter": [
{
"Name": "ByIncludingOnly",
"Args": {
"expression": "Contains(@Message, 'EventLog:')"
}
}
],
"Args": {
"source": "WebUI Application",
"logName": "Application",
"manageEventSource": true,
"restrictedToMinimumLevel": "Verbose",
"levelSwitch": "$controlSwitch"
}
}
...
配置:
我尝试了各种表达式配置、旧语法、新语法等,但没有成功。
将以下代码添加到
program.cs
中可以正常工作,并且只会创建日志级别“错误”的事件日志。我有以下来自 .Net8 示例控制台应用程序的示例。
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Logger( lev => lev
.Filter.ByIncludingOnly( l => l.Level == LogEventLevel.Error)
.WriteTo.EventLog("SerilogConsoleApp.Eample", manageEventSource:true))
.CreateLogger();
我注意到您的配置结构错误,请尝试使用以下配置更改您的
appsettings.json
并查看。
{
"Name": "EventLog",
"Args": {
"source": "SerilogConsoleApp.Eample",
"logName": "SerilogConsoleApp",
"manageEventSource": true,
"filter": [
{
"Name": "ByIncludingOnly",
"Args": {
"expression": "Level = 'Error'"
}
}
]
}
}