.NET 6新特性试用 | HTTP日志记录middleware

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 6新特性试用 | HTTP日志记录middleware相关的知识,希望对你有一定的参考价值。

前言

在以前,通常需要我们自己编写middleware记录HTTP请求和响应。

而在.NET 6中默认就有已经实现好的middleware,添加了对HTTP日志记录的支持。

Demo

要想启用HTTP日志记录middleware十分简单:

app.UseHttpLogging();

运行程序,发现没有任何日志!?

原来,Microsoft.AspNetCore默认日志记录级别为Warning,需要在配置文件中设置HttpLogging的日志记录级别为Information

"Logging": 
    "LogLevel": 
        "Default": "Information",
        "Microsoft.AspNetCore.HttpLogging": "Information",
        "Microsoft.AspNetCore": "Warning"
    
,

再次运行程序,发现默认情况下HTTP日志记录middleware将记录以下内容(请求和响应):

info: Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware[1]
      Request:
      Protocol: HTTP/2
      Method: GET
      Scheme: https
      PathBase:
      Path: /WeatherForecast
      Accept: text/plain
      Host: localhost:7082
      User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29
      :method: [Redacted]
      Accept-Encoding: gzip, deflate, br
      Accept-Language: en-US,en;q=0.9
      Cookie: [Redacted]
      Referer: [Redacted]
      sec-ch-ua: [Redacted]
      sec-ch-ua-mobile: [Redacted]
      sec-ch-ua-platform: [Redacted]
      sec-fetch-site: [Redacted]
      sec-fetch-mode: [Redacted]
      sec-fetch-dest: [Redacted]
info: Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware[2]
      Response:
      StatusCode: 200
      Content-Type: application/json; charset=utf-8
      Date: 
      Server: Kestrel

可以看到,有大量的[Redacted]数据,这是因为安全考虑,默认情况下不记录这些敏感信息,比如Cookie。

我们可以使用AddHttpLogging自定义配置需要记录的信息,比如:

builder.Services.AddHttpLogging(options =>

    options.RequestHeaders.Add("Cookie");
);

详细的配置如下:

属性说明
LoggingFields要记录请求和响应的字段。默认记录请求和响应属性和标头。
MediaTypeOptions用于配置特定媒体类型的编码的选项。如果请求或响应与支持的媒体类型不匹配,将不会记录响应正文。
RequestBodyLogLimit要记录的最大请求正文大小 (字节数) 。默认值为 32 KB。
RequestHeaders允许记录的请求标头值。
ResponseBodyLogLimit日志的最大响应正文大小 (字节数) 。默认值为 32 KB。
ResponseHeaders允许记录的响应标头值。

结论

需要注意的是,使用HTTP日志记录会对性能有一定影响,请酌情是否开启或规划记录哪些内容。

如果你觉得这篇文章对你有所启发,请帮忙点个或者在看

以上是关于.NET 6新特性试用 | HTTP日志记录middleware的主要内容,如果未能解决你的问题,请参考以下文章

.NET 6新特性试用 可写JSON DOM API

.NET 6新特性试用 | 总结:我最喜欢的5个特性

.NET 6新特性试用 | PeriodicTimer

.NET 6新特性试用 | 可空引用类型

.NET 6新特性试用 | TryGetNonEnumeratedCount

.NET 6新特性试用 | PriorityQueue