【问题标题】:Reducing HttpClient log verbosity减少 HttpClient 日志的详细程度
【发布时间】:2022-01-06 15:46:18
【问题描述】:

我目前正在编写一个 .NET 6 应用程序,它会进行一些 REST 调用。

由于某种原因,当进行这些调用时,HttpClient 正在记录以下内容:

[15:33:15 INF] Start processing HTTP request GET URL_GOES_HERE
[15:33:15 INF] Sending HTTP request GET URL_GOES_HERE
[15:33:15 INF] Received HTTP response headers after 70.5393ms - 200
[15:33:15 INF] End processing HTTP request after 73.441ms - 200

由于我正在拨打的电话数量众多,这让我的日志平台难以导航。

我在网上找不到任何关于如何将这些日志静音的文档。他们似乎是 .NET 6 的新手?至少在开始这个新项目之前我还没有见过他们。

我发现this github repo 解决了这个问题,但是,我宁愿不要为了让一些日志静音而拉入第三方包。

我的应用程序中有其他“信息”级别日志,这意味着我无法抑制整个级别。

真的没有本地方法可以让这些来自 HttpClient 的日志静音吗?

【问题讨论】:

  • 查看this question的答案。这是关于将日志记录级别设置为无,但您也可以在appsettings.json 文件中将其设置为“警告”或“错误”。

标签: c# .net logging dotnet-httpclient .net-6.0


【解决方案1】:

日志设置在您的 appsettings.json 文件(或 appsettings.development.json 文件)中设置:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

将默认值更改为“警告”或“错误”(或更高)将删除较低级别的消息(例如您收到的信息消息)。

【讨论】:

  • 对不起,我应该澄清一下。我无法删除所有信息级别的日志,因为我需要保留一些重要的日志,我无法控制它们是否是信息。我只是想把上面提到的HttpClient日志具体去掉。
  • 这个答案缺少一个重要部分,“LogLevel”下的键是命名空间。因此,通过添加"System.Net.Http.HttpClient": "Error",您可以从 HttpClient 中过滤掉错误以下的内容。
  • @Karl-JohanSjögren 你是对的。这解决了 Jessica 关于不想过滤掉所有 INF 日志的评论。
【解决方案2】:

我设法使用Serilog 排除了这些日志,我已经在应用程序中使用了它。

在设置 LoggerConfiguration 时,您可以应用“过滤器”,如下所示:

Log.Logger = new LoggerConfiguration()
    .Filter.ByExcluding("SourceContext like '%System.Net.Http.HttpClient%' and @l = 'Information'")
    .CreateLogger();

【讨论】:

    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多