You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何减少Serilog中HttpClient调用的冗余日志?

解决Serilog下HttpClient INFO日志过多的问题

方案一:直接在代码里过滤HttpClient日志

你当前的Serilog配置是硬编码实现的,没有读取appsettings.json的设置,所以之前在配置文件里的修改不生效。可以直接在LoggerConfiguration中添加过滤规则,屏蔽HttpClient的INFO日志:

var loggerConfig = new LoggerConfiguration()
    // 过滤掉System.Net.Http命名空间下的INFO及更低级别日志
    .Filter.ByExcluding(logEvent => 
        logEvent.Properties.TryGetValue("SourceContext", out var sourceCtx) &&
        sourceCtx.ToString().Contains("System.Net.Http") &&
        logEvent.Level <= LogEventLevel.Information)
    .WriteTo.Console()
    .WriteTo.File($"logs/log-{DateTime.Now:dd.MM.yy_HH.mm}.log")
    .CreateLogger();

如果需要更精准过滤(比如只针对HttpClient的特定Handler日志),可以调整条件:

.Filter.ByExcluding(logEvent => 
    logEvent.Properties.TryGetValue("SourceContext", out var sourceCtx) &&
    (sourceCtx.ToString().StartsWith("\"System.Net.Http.HttpClient") || 
     sourceCtx.ToString().Contains("HttpMessageHandler")) &&
    logEvent.Level == LogEventLevel.Information)

方案二:让Serilog读取appsettings.json配置

如果想通过配置文件统一管理日志级别,需要修改代码让Serilog加载配置文件:

  1. 确保appsettings.json里的Serilog配置正确:
{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "System.Net.Http.HttpClient": "Warning"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      { 
        "Name": "File",
        "Args": { 
          "path": "logs/log-.log", 
          "rollingInterval": "Day",
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
        }
      }
    ]
  }
}

这里把日志设置为按天滚动,避免每次启动生成新文件,更符合实际使用场景。

  1. 修改Logger创建代码,读取配置:
var configuration = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .Build();

var loggerConfig = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
    .CreateLogger();

services.AddLogging(options => options.AddSerilog(loggerConfig, dispose: true));

这样appsettings里的Override设置就会生效,HttpClient的INFO日志将不再输出。

补充说明

  • 如果是命名HttpClient(比如用services.AddHttpClient("MyCustomClient")注册的),对应的日志SourceContext会是System.Net.Http.HttpClient.MyCustomClient.LogicalHandler或System.Net.Http.HttpClient.MyCustomClient.ClientHandler,需要在配置文件的Override里写成"System.Net.Http.HttpClient.MyCustomClient": "Warning"才能生效。
  • 可以根据需求调整日志级别为LogEventLevel.Error,进一步缩小日志范围,只保留错误级别的记录。

内容的提问来源于stack exchange,提问作者muttley91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 15:22:20