【问题标题】:Set Log Levels for Microsoft.* , System, and AspNet when using Serilog使用 Serilog 时为 Microsoft.*、System 和 AspNet 设置日志级别
【发布时间】:2022-11-12 05:15:01
【问题描述】:

我一直以为

  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },

会将我的项目代码的日志级别设置为调试,并使 Microsoft.* 命名空间在信息级别或更高级别进行日志记录。似乎没有。使用此配置,AspNetCore 基础架构会在调试级别进行日志记录。

如何将 Microsoft.* 定位为不使用默认级别?

我正在使用 Serilog,但注入的 Logger 都是 Microsoft.Extensions.Logging.ILogger 所以我希望 Microsoft.Extensions.Logging 配置能够启动。

这是一个错误的假设吗?

【问题讨论】:

    标签: asp.net-core microsoft-extensions-logging serilog-filter


    【解决方案1】:

    是的,Serilog 在与 Extensions.Logging 一起使用时会尊重 Logging.LogLevel 部分的假设是错误的。它没有。

    要从配置中读取 serilog 级别,一些选项是:

    var defaultLogLevel = configuration.GetLogLevel("Default");
    var aspNetCoreLogLevel = configuration.GetLogLevel("Microsoft.AspNetCore");
    var microsoftLogLevel = configuration.GetLogLevel("Microsoft");
    var logger = new LoggerConfiguration()
                    .MinimumLevel.Is(defaultLogLevel)
                    .MinimumLevel.Override("Microsoft.AspNetCore", aspNetCoreLogLevel)
                    .MinimumLevel.Override("Microsoft", microsoftLogLevel)
                    // ... etc ...
    
    // ...
    
    static LogEventLevel GetLogLevel(this IConfiguration configuration, string @namespace, string fallbackLevel = "Information")
    {
            return Enum.Parse<LogEventLevel>(configuration["Logging:LogLevel:" + @namespace] ?? fallbackLevel);
    }
    

    但是最低级别的配置方法的优点是您可以使用 reloadOnChange

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      • 2018-04-14
      • 1970-01-01
      • 2018-06-03
      • 2015-12-17
      • 2012-05-04
      • 2017-10-01
      相关资源
      最近更新 更多