【问题标题】:Serilog ignoring LogLevel from Microsoft.Extension.LoggingSerilog 忽略来自 Microsoft.Extension.Logging 的 LogLevel
【发布时间】:2021-05-02 20:40:54
【问题描述】:

我正在使用NET5 ASP.NET MVC 应用程序。应用程序正在使用Serilog.AspNetCore 3.4.0 进行日志记录

appsettings.json

{
  "Logging": {
    "LogLevel": {
      "Default": "Error"
    }
  },
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console"],
    "WriteTo": [
      {
        "Name": "Console"
      }
    ]
  }
}

Program.cs

     public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                   .UseStartup<Startup>()
                   .ConfigureLogging((hostingContext, logging) =>
                   {
                       logging.ClearProviders();                    
                   })                       
                   .UseSerilog((hostingContext, logging) =>
                   {
                      logging.ReadFrom.Configuration(hostingContext.Configuration);
                   });
            });

我也试过

 public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                   .UseStartup<Startup>()
                   .ConfigureLogging((hostingContext, logging) =>
                   {
                       logging.ClearProviders();
                       Log.Logger = new LoggerConfiguration()
                       .ReadFrom.Configuration(hostingContext.Configuration)                           
                       .CreateLogger();
                       logging.AddSerilog();
                   });                       
               
            });

问题
我的期望是不会在Console 中显示Information 日志,因为默认的LogLevel 是Error。 但是,这是行不通的。在控制台中,我看到每个请求都被记录下来,包括 Information

在我的整个应用程序中,我使用Microsoft.Extensions.Logging.ILogger&lt;MyClassName&gt; 来记录信息。所有这些语句实际上都在记录 Info,即使 LogLevel 是 Error

看起来 Serilog 忽略了来自 Microsoft.Extensions.Logging 的 LogLevel。

请注意,我可以将 serilog 的 restrictedToMinimumLevel 属性设置为 Error 并停止记录信息。但是我认为 serilog 应该遵守 Microsoft.Extension.Logging

的 LogLevel

【问题讨论】:

标签: c# asp.net-core serilog


【解决方案1】:

使用MinimumLevel 属性:

  "Logging": {
    "MinimumLevel": {
      "Default": "Error"
    }
  }

它还支持覆盖类别:

  "Logging": {
    "MinimumLevel": {
      "Default": "Error",
      "Override": {
        "System": "Information",
        "Microsoft": "Information",
        "Microsoft.Hosting.Lifetime": "Information",
        "Microsoft.EntityFrameworkCore": "Debug"
      }
    }
  }

【讨论】:

  • Serilog.Settings.Configuration 已经包含在Serilog.AspNetCore 包中。它用于A Serilog settings provider that reads from Microsoft.Extensions.Configuration sources, including .NET Core's appsettings.json file.
  • @LP13 是的,错过了您使用AspNetCore 之一。
  • 顺便说一句,是的,如果我直接设置 Serilog 的最低级别,那么它就可以工作。但是,serilog 应该从 Microsoft 的日志中读取最低级别。这就是 Serilog.Settings.Configuration 的重点
  • @LP13 “但是 serilog 应该从 Microsoft 的日志中读取最低级别。这就是 Serilog.Settings.Configuration 的重点” - 不,不是,请查看他们的 docs。例如,默认情况下,他们只检查配置的 Serilog 部分。
  • 我有另一个使用 NET Core 2 的应用程序,并且在该应用程序中 Serilog 正在从 Logging 部分读取默认级别。 NET5 可能不支持它?不确定github.com/serilog/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多