如何将过滤器与 Serilog.Sinks.EventLog 一起使用

问题描述 投票:0回答:1

我真的不确定我错过了什么。 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"
                }
        }
...

配置:

  • .Net 8
  • Serilog.AspNetCore v8.0.0
  • SerilogExpressions v4.0.0
  • Serilog.Sinks.EventLog v3.1.0

我尝试了各种表达式配置、旧语法、新语法等,但没有成功。

serilog serilog-aspnetcore serilog-expressions
1个回答
0
投票

将以下代码添加到

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'"
        }
      }
    ]
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.