HTTP:IHttpClientFactory 创建的 HttpClient 实例记录整数状态代码
IHttpClientFactory 创建的 HttpClient 实例将 HTTP 状态代码记录为整数而不是状态代码名称。
引入的版本
5.0 预览版 1
旧行为
日志记录使用 HTTP 状态代码的文本说明。 考虑以下日志消息:
Received HTTP response after 56.0044ms - OK
End processing HTTP request after 70.0862ms - OK
新行为
日志记录使用 HTTP 状态代码的整数值。 考虑以下日志消息:
Received HTTP response after 56.0044ms - 200
End processing HTTP request after 70.0862ms - 200
更改原因
此日志记录的原始行为与始终使用整数值的 ASP.NET Core 的其他部分不一致。 不一致使通过结构化日志记录系统(如 Elasticsearch)查询日志变得困难。 有关详细信息,请参阅 dotnet/extensions#1549。
使用整数值比文本更灵活,因为它允许对值范围进行查询。
考虑添加另一个日志值来捕获整数状态代码。 遗憾的是,这样做会导致与 ASP.NET Core 的其余部分不一致。 HttpClient 日志记录和 HTTP 服务器/托管日志记录使用相同的 StatusCode
密钥名称。
建议操作
最佳选择是更新日志记录查询,以使用状态代码的整数值。 这种方式可能会导致跨多个 ASP.NET Core 版本编写查询时遇到一些困难。 但是出于此目的使用整数查询日志会更加灵活。
如果需要强制与旧行为兼容并使用文本状态代码,请将 IHttpClientFactory
日志记录替换为你自己的日志记录:
将以下类的 .NET Core 3.1 版本复制到项目中:
重命名类,以避免与 Microsoft.Extensions.Http NuGet 包中的公共类型发生冲突。
在项目的
Startup.ConfigureServices
方法中,将LoggingHttpMessageHandlerBuilderFilter
的内置实现替换为自己的实现。 例如:public void ConfigureServices(IServiceCollection services) { // Other service registrations go first. Code omitted for brevity. // Place the following after all AddHttpClient registrations. services.RemoveAll<IHttpMessageHandlerBuilderFilter>(); services.AddSingleton<IHttpMessageHandlerBuilderFilter, MyLoggingHttpMessageHandlerBuilderFilter>(); }
受影响的 API
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈