【问题标题】:Cannot set minimum logging level to warning for HttpClients using Serilog无法使用 Serilog 将最小日志记录级别设置为 HttpClients 的警告
【发布时间】:2021-09-14 05:52:03
【问题描述】:

我正在尝试将使用 HttpClient 的 Serilog 调用的最低级别设置为在使用 Serilog 2.10.0 的 .Net 5 Blazor 应用程序中发出警告。它似乎可以工作 EFCore 和其他组件,但不能工作 HTTPClient - 每次进行 HttpClient 调用时,我都会获得非常详细的信息级别日志记录。

我的 Program.cs 文件中的代码如下所示。

 public static void Main(string[] args)
    {
        // see https://nblumhardt.com/2019/10/serilog-in-aspnetcore-3/
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
            .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
            .MinimumLevel.Override("System", LogEventLevel.Warning)
            .MinimumLevel.Override("System.Net.Http.HttpClient", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.File(new CompactJsonFormatter(), "Logs/log-.clef", rollingInterval: RollingInterval.Day)
            .WriteTo.Console()
            .CreateLogger();

任何有关如何解决此问题的建议将不胜感激。

【问题讨论】:

    标签: serilog


    【解决方案1】:

    这是一个错误,已在 4.0.0 版本中修复,请参阅:

    https://github.com/serilog/serilog-aspnetcore/issues/221

    另一种方法是使用 ILogEventFilter:

    public class MyLoggingFilter : ILogEventFilter
    {
        private static readonly HashSet<string> ignoredMessages = new HashSet<string>(StringComparer.Ordinal)
        {
            "Start processing HTTP request {HttpMethod} {Uri}",
            "End processing HTTP request after {ElapsedMilliseconds}ms - {StatusCode}"
        };
    
        // Allow the event to be logged if the message template isn't one we ignore
        public bool IsEnabled(LogEvent logEvent) => !ignoredMessages.Contains(logEvent.MessageTemplate.Text);
    }
    

    和:

    Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning)
        .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
        .MinimumLevel.Override("System", LogEventLevel.Warning)
        .Filter.With<MyLoggingFilter>() // <-- Plug in your filter type
        .Enrich.FromLogContext()
        .WriteTo.File(new CompactJsonFormatter(), "Logs/log-.clef", rollingInterval: RollingInterval.Day)
        .WriteTo.Console()
        .CreateLogger();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-27
      • 2023-03-23
      • 1970-01-01
      • 2020-04-16
      • 2012-02-17
      • 2022-11-12
      • 2017-07-10
      相关资源
      最近更新 更多