不同的最低级别日志 Serilog

Different Minimum Level Logs Serilog

有没有办法区分 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",但没用。

您要找的设置是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"
      }
    ]
  },

在您的配置中,您有一个 Serilog 记录器,但是您有 2 个 sinks。您的接收器之一是 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"
      }
    ]
  },

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

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

在我这样做之后,它适用于日志级别 Information 及更高级别。调试没有用。 解释了原因。

我必须像这样设置一个 'global' 最低级别。

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