不同的最低级别日志系列

时间:2018-08-27 20:46:54

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

是否可以区分Serilog的不同记录器之间记录的级别?我希望能够将MinimumLevel Debug记录到控制台输出,但是将Warning和以上记录到我的文件输出中。我正在使用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”,但没有用。

3 个答案:

答案 0 :(得分:5)

您要查找的设置是restrictedToMinimumLevel。这个GitHub issue显示了一些示例,但是对于您的示例,您只需要在restrictedToMinimumLevel的{​​{1}}中添加Args

RollingFile

答案 1 :(得分:2)

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

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

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

"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 :(得分:0)

根据上面的答案,这是我在代码中而不是在config中进行设置的方式

List<T>

完成此操作后,它可用于日志级别的“信息”及更高级别。调试无效。 This post解释了原因。

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

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>();