【问题标题】:Explicit Log Level instead of MinimumLevel for SerilogSerilog 的显式日志级别而不是 MinimumLevel
【发布时间】:2019-05-30 07:43:29
【问题描述】:

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

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

【问题讨论】:

  • 您是否试图将错误与信息消息分开?您可以使用restrictedToMinimumLevel 将错误写入单独的接收器。不过,从公共日志中删除错误并不是最好的主意。在记录错误消息之前,您将无法看到发生了什么以及导致错误消息的原因
  • 别这么认为,文档似乎很清楚。 github.com/serilog/serilog/wiki/Configuration-Basics
  • 嗨@Panagiotis!您可以通过示例添加答案吗?
  • 是你想做的吗?将所有事件放在一个公共文件中,例如log.txt,并为错误事件创建单独的错误日志?
  • 不,我需要每个文件只有一个日志级别的事件

标签: c# serilog


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    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 文件中读取设置并且想要使用上述设置,您应该从文件中转移您的逻辑。

    我的回答深受以下帖子的启发: Restrict to level

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多