使用HttpLogging中间件记录接口请求日志

介绍

  1. HttpLogging 是 .NET 6 新加入的一个框架内置的中间件
  2. 可以提供以下信息的日志:
  • HTTP请求信息
  • Common properties
  • Headers
  • Body
  • HTTP响应信息

使用

添加

builder.Services.AddHttpLogging(options =>
{
    // 日志记录的字段配置,可以以 | 连接
    options.LoggingFields = HttpLoggingFields.All;
    // 增加请求头字段记录
    options.RequestHeaders.Add("sec-ch-ua");
    // 增加响应头字段记录
    options.ResponseHeaders.Add("MyResponseHeader");
    // 增加请求的媒体类型
    options.MediaTypeOptions.AddText("application/javascript");
    // 配置请求体日志最大长度.默认32 * 1024,32kb
    options.RequestBodyLogLimit = 4096;
    // 配置响应体日志最大长度.默认32 * 1024,32kb
    options.ResponseBodyLogLimit = 4096;
});

使用,注意中间件顺序

app.UseHttpLogging();

记得在appsettings.json的"LogLevel"中设置这个

"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"

更多配置详解参见官方教程

效果如下
img
其中[Redacted]标识的Header信息是传递了但是默认未记录的,要记录需要自行添加.

问题

Q: 怎么忽略指定Api的日志记录?比如一些轮询接口
A: 目前可以使用这样的方式实现.参考HttpLoggingWithFilter

app.UseWhen(
  context => !context.Request.Path.StartsWithSegments("/Sensitive"), //SensitiveController.cs
  builder => builder.UseHttpLogging()
);

Q: 怎么忽略指定Api中的指定信息?比如一些传递密码或者身份信息的接口
A: 可以用上边的方法忽略然后自行记录

官方issue跟进
HttpLoggingMiddleware could allow custom code to decide whether to log or not
Make Http Logging Middleware Endpoint aware
HttpLoggingMiddleware does not log all response headers when log response body

posted @ 2023-06-28 13:57  ZUOXIANGE  阅读(355)  评论(5编辑  收藏  举报