Serilog 的显式日志级别而不是 MinimumLevel

Explicit Log Level instead of MinimumLevel for Serilog

有什么方法可以在 serilog 中为每个文件配置一个日志级别?

我知道我可以为每个 "MinimumLevel" 配置一个文件,但这不是我需要的。

我也有类似的需求。经过一些研究,我在我的 .net core 2.2 web api 的 Startup class 中添加了以下内容:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Error)
    .WriteTo.Logger(lc => lc
        .Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Error)
        .WriteTo.RollingFile("C:\Temp\erros-logs.txt"))
    .WriteTo.Logger(lc => lc
        .Filter.ByIncludingOnly(evt => evt.Level == LogEventLevel.Information)
        .WriteTo.RollingFile("C:\Temp\info-logs.txt"))
    .CreateLogger();

如果您正在从 appsettings.json 文件中读取设置并且您想要使用上述内容,您应该从文件中传输您的逻辑。

我的回答很大程度上受到了以下 post 的启发: Restrict to level

Serilog.Sinks.Map 可以用于此而不会引入太多重复:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Map(le => le.Level, (level, wt) => wt.File($"C:\Temp\{level}-logs.txt"));