不同的最低级别日志系列

jol*_*r23 5 c# serilog asp.net-core 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"
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)

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

Dam*_*yer 11

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

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>();
Run Code Online (Sandbox Code Playgroud)

在我这样做之后,它适用于日志级别信息及以上。调试没成功。这篇文章解释了原因。

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

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


Sae*_*ini 8

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

您可以覆盖(但仅提高)每个接收器的最小日志记录级别,该参数称为restrictedToMinimumLevel

由于您想要将记录器的默认最低日志记录级别提高DebugWarning文件接收器中的默认日志记录级别,因此在 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"
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)


Kir*_*kin 7

您要查找的设置是restrictedToMinimumLevel。这GitHub的问题显示了这样一些例子,但是对于你的榜样,你只需要添加restrictedToMinimumLevel到您ArgsRollingFile

"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"
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)