HttpClient 创建的 IHttpClientFactory 实例将 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 包中的公共类型发生冲突。
在项目的
LoggingHttpMessageHandlerBuilderFilter
方法中,将Startup.ConfigureServices
的内置实现替换为自己的实现。 例如: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>(); }