C# 使用Microsoft.Extensions.Logging可以筛选单个EventID吗?

C# 使用Microsoft.Extensions.Logging可以筛选单个EventID吗?,c#,logging,serilog,C#,Logging,Serilog,我想生成一个日志文件,其中只包含特定EventId(或EventId)的日志输出。是否支持此类功能?如果您以提供程序的身份插入Serilog,则可以继续通过Microsoft.Extensions.logging进行日志记录,但应用Serilog的筛选以限制发送到日志文件的内容 为此,您需要使用以下Serilog配置: Log.Logger = new LoggerConfiguration() .Filter.ByIncludingOnly("EventId.Id = 9")

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

如果您以提供程序的身份插入Serilog,则可以继续通过Microsoft.Extensions.logging进行日志记录,但应用Serilog的筛选以限制发送到日志文件的内容

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

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


您可以使用插入Serilog,要编译此示例,还需要安装Serilog.Sinks.RollingFile和Serilog.Filters.Expressions软件包。

如果要使用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包,然后配置一个用于写入日志的接收器,最后定义一个过滤器

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