6.71HTTP 请求日志(关闭)
更新于 2026 年 8 月 21 日约 2 分钟读完
默认情况下,系统会在发送 HTTP 远程请求时打印相关日志信息,如下所示:
info: System.Net.Http.HttpClient.Default.LogicalHandler[100] Start processing HTTP request GET https://furion.net/info: System.Net.Http.HttpClient.Default.ClientHandler[100] Sending HTTP request GET https://furion.net/info: System.Net.Http.HttpClient.Default.ClientHandler[101] Received HTTP response headers after 93.0553ms - 200info: System.Net.Http.HttpClient.Default.LogicalHandler[101] End processing HTTP request after 122.2355ms - 200若您希望关闭这些日志信息,可以在项目的 appsettings.json 以及 appsettings.Development.json 配置文件中进行如下设置:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Microsoft.EntityFrameworkCore": "Information", "System.Net.Http.HttpClient": "Warning" // 将日志级别设置为 Warning 以关闭 Info 级别日志 } }}通过将 System.Net.Http.HttpClient 的日志级别设置为 Warning,您可以有效地关闭 Info 级别的 HTTP 请求日志信息。请注意,在 appsettings.Development.json 中的设置将覆盖 appsettings.json 中的相应设置(如果两者都存在的话),这通常用于在开发环境中提供不同的日志记录策略。
除了上述配置方式,您还可以在程序中关闭 HTTP 远程请求的日志记录。具体操作如下:
// 为默认客户端关闭日志services.AddHttpClient(string.Empty) .RemoveAllLoggers();// 为特定客户端关闭日志//services.AddHttpClient("weixin")// .RemoveAllLoggers();// 还可以一键为所有客户端配置关闭日志services.ConfigureHttpClientDefaults(clientBuilder =>{ clientBuilder.RemoveAllLoggers();});// 或使用 IHttpRemoteBuilder 扩展方法进行一键配置services.AddHttpRemote() .ConfigureHttpClientDefaults(clientBuilder => { clientBuilder.RemoveAllLoggers(); });自定义日志服务(继承 HttpRemoteLoggerBase)
HttpRemoteBuilder 提供了 UseLogger 方法,允许您使用自定义日志服务替换内置的日志实现。自定义日志服务需继承 HttpRemoteLoggerBase 抽象类,并实现(重写)Log 方法,如下所示:
// 自定义日志服务:继承 HttpRemoteLoggerBase 实现internal sealed class CustomHttpRemoteLogger( ILogger<Logging> logger, IOptionsMonitor<HttpRemoteOptions> httpRemoteOptions, bool isLoggingRegistered) : HttpRemoteLoggerBase{ /// <inheritdoc /> public override void Log(LogLevel logLevel, Exception? exception, string? message, params object?[] args) { // 检查是否注册了日志输出程序 if (isLoggingRegistered) { logger.Log(logLevel, exception, message, args); } else { // 调用备用日志输出委托 httpRemoteOptions.CurrentValue.FallbackLogger?.Invoke(LogMessageFormatter.Value(message, args)); } }}完成定义后,通过 UseLogger 方法进行注册即可:
services.AddHttpRemote(builder =>{ // 注册自定义日志服务 builder.UseLogger<CustomHttpRemoteLogger>(); // 或使用 Type 注册 // builder.UseLogger(typeof(CustomHttpRemoteLogger));});不使用 UseLogger 手动注册:
若您希望完全自行控制,例如需要向自定义构造函数传递更多参数(而非仅 isLoggingRegistered),可以不使用 UseLogger 方法,在外部自行注册 IHttpRemoteLogger 服务,如下所示:
// 检查是否配置(注册)了日志程序var isLoggingRegistered = services.Any(u => u.ServiceType == typeof(ILoggerProvider));// 移除所有已存在的 IHttpRemoteLogger 注册services.RemoveAll<IHttpRemoteLogger>();// 手动注册自定义日志服务,可传递更多参数services.AddSingleton<IHttpRemoteLogger>(provider => (IHttpRemoteLogger)ActivatorUtilities.CreateInstance(provider, typeof(CustomHttpRemoteLogger), isLoggingRegistered, 额外参数1, 额外参数2 /*... 这里可以传递更多参数 */));这样您便可以完全掌控构造函数的参数传递,按需注入任何所需服务或参数。