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

打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

介绍


  • HttpLogging 是 .NET 6 新加入的一个框架内置的中间件
  • 可以提供以下信息的日志:


  • HTTP请求信息
  • Common properties
  • Headers
  • Body
  • HTTP响应信息
使用

添加
  1. builder.Services.AddHttpLogging(options =>
  2. {
  3.     // 日志记录的字段配置,可以以 | 连接
  4.     options.LoggingFields = HttpLoggingFields.All;
  5.     // 增加请求头字段记录
  6.     options.RequestHeaders.Add("sec-ch-ua");
  7.     // 增加响应头字段记录
  8.     options.ResponseHeaders.Add("MyResponseHeader");
  9.     // 增加请求的媒体类型
  10.     options.MediaTypeOptions.AddText("application/javascript");
  11.     // 配置请求体日志最大长度.默认32 * 1024,32kb
  12.     options.RequestBodyLogLimit = 4096;
  13.     // 配置响应体日志最大长度.默认32 * 1024,32kb
  14.     options.ResponseBodyLogLimit = 4096;
  15. });
复制代码
使用,注意中间件顺序
  1. app.UseHttpLogging();
复制代码
记得在appsettings.json的"LogLevel"中设置这个
  1. "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
复制代码
更多配置详解参见官方教程
效果如下

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

Q: 怎么忽略指定Api的日志记录?比如一些轮询接口
A: 目前可以使用这样的方式实现.参考HttpLoggingWithFilter
  1. app.UseWhen(
  2.   context => !context.Request.Path.StartsWithSegments("/Sensitive"), //SensitiveController.cs
  3.   builder => builder.UseHttpLogging()
  4. );
复制代码
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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表