不同的最低级别日志 Serilog

Posted

技术标签:

【中文标题】不同的最低级别日志 Serilog【英文标题】:Different Minimum Level Logs 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 之类的东西,但无济于事 【参考方案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();

【讨论】:

以上是关于不同的最低级别日志 Serilog的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统日志级别

日志级别

日志级别

在程序开发中日志级别

Java日志级别

Java日志级别