使用Microsoft.Extensions.Logging可以过滤单个EventID吗?

时间:2017-09-13 17:01:51

标签: c# logging serilog

我想生成一个日志文件,其中只包含来自特定EventId(或EventIds)的日志输出。是否支持此类功能?

2 个答案:

答案 0 :(得分:0)

如果您将Serilog作为提供程序插入,则可以继续通过 Microsoft.Extensions.Logging 进行日志记录,但应用Serilog的过滤来限制发送到日志文件的内容。

为此,您需要使用以下Serilog配置:

summarise_if

(其中Log.Logger = new LoggerConfiguration() .Filter.ByIncludingOnly("EventId.Id = 9") .WriteTo.RollingFile("logs/log-{Date}.txt") .CreateLogger(); 是您要包含的任何事件ID。)

您可以使用https://github.com/serilog/serilog-aspnetcore插入Serilog,要编译此示例,您还需要安装 Serilog.Sinks.RollingFile Serilog.Filters。表达式包。

答案 1 :(得分:0)

如果你想使用 appsettings 文件配置 Serilog,你可以使用这样的东西:

"Serilog": {
    "Using": ["Serilog.Sinks.File", "Serilog.Settings.Configuration", "Serilog.Expressions"],
    "MinimumLevel": {
        "Default": "Debug"
    },
    "WriteTo": [{
            "Name": "File",
            "Args": {
                "path": "log.txt",
                "rollingInterval": "Day",
                "retainedFileCountLimit": "120",
                "rollOnFileSizeLimit": "true",
                "theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console"
            }
        }
    ],
    "Filter": [{
            "Name": "ByIncludingOnly",
            "Args": {
                "expression": "EventId.Id = 101"
            }
        }
    ]
}

在 using 字段中,您必须放置您要导入的所有 Serilog 包,然后配置一个用于写入日志的接收器,最后定义一个过滤器。

我几乎花了一个上午的时间来实现这一目标,所以我希望它对您有所帮助