【问题标题】:Different Minimum Level Logs Serilog不同的最低级别日志 Serilog
【发布时间】:2019-02-02 10:20:18
【问题描述】:

有没有办法区分 Serilog 的不同记录器之间记录的级别?我希望能够将 MinimumLevel Debug 记录到控制台输出,但仅将警告及以上记录到我的文件输出。我正在使用 ASP.NET Core 2.1,这就是 appsetting.json 目前的样子:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "IsJson": true,
        "Args": {
          "pathFormat": "C:\\Logs\\Log-{Hour}.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
        }
      },
      {
        "Name": "Console"
      }
    ]
  },

它类似于“Args”下的另一个参数吗?我已在此位置尝试过“minimumnLevel”,但没有成功。

【问题讨论】:

  • app.config 中是如何做到的?
  • 对于 .Net 应用程序?对于.net,我不需要这种级别的细节/差异化,只需要.net 核心。这是我在添加 serilog 后添加到 .Net 配置中的全部内容:
  • 我能够让它在 app.config 中工作。诀窍是确保 serilog 实际上关注这一行。 然后为了记录到我使用的文件 和然后使用它登录到控制台 抱歉格式化,我不确定如何在评论中进行换行。
  • 感谢@PHenry 找出应用程序/网络配置设置来设置调试的最低级别。我一直在尝试serilog:MinimumLevel:Debug 之类的东西,但无济于事

标签: c# asp.net-core serilog asp.net-core-2.1


【解决方案1】:

您要查找的设置是restrictedToMinimumLevel。此 GitHub issue 显示了一些示例,但对于您的示例,您只需将 restrictedToMinimumLevel 添加到您的 Args for RollingFile

"Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "IsJson": true,
        "Args": {
          "pathFormat": "C:\\Logs\\Log-{Hour}.json",
          "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
          "restrictedToMinimumLevel": "Warning"
        }
      },
      {
        "Name": "Console"
      }
    ]
  },

【讨论】:

    【解决方案2】:

    在您的配置中,您有一个 Serilog 记录器,但您有 2 个 sink。您的接收器之一是 RollingFile,另一个是 Console。

    You can override (but only raise) the minimum logging level per sink,参数称为restrictedToMinimumLevel

    由于您想在文件接收器中将最低日志记录级别从记录器的默认 Debug 提高到 Warning,因此在 appsettings.json 文件中,它看起来像这样:

    "Serilog": {
        "Using": [ "Serilog.Sinks.Console" ],
        "MinimumLevel": "Debug",
        "WriteTo": [
          {
            "Name": "RollingFile",
            "IsJson": true,
            "Args": {
              "pathFormat": "C:\\Logs\\Log-{Hour}.json",
              "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
              "restrictedToMinimumLevel": "Warning"
            }
          },
          {
            "Name": "Console"
          }
        ]
      },
    

    【讨论】:

      【解决方案3】:

      根据上面的答案,这就是我在代码中而不是在配置中设置它的方式

      LoggerConfiguration GetConfig()
                      => new LoggerConfiguration()
                          .WriteTo.Seq(serverUrl: "http://localhost:5341", restrictedToMinimumLevel: LogEventLevel.Debug)
                          .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error);
                  var logger = GetConfig().CreateLogger();
                  builder.RegisterInstance(logger).As<ILogger>();
      

      在我这样做之后,它适用于日志级别信息及更高级别。调试不起作用。 This post 解释了原因。

      我必须像这样设置一个“全局”最低级别。

      LoggerConfiguration GetConfig()
                  => new LoggerConfiguration()
                      .WriteTo.Seq(serverUrl: "http://localhost:5341", restrictedToMinimumLevel: LogEventLevel.Debug)
                      .WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error)
                      .MinimumLevel.Verbose();
      

      【讨论】:

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