使用HttpLogging中间件记录接口请求日志
  F4Bd6FpL4qNQ 2023年11月02日 44 0

介绍

  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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  JZjRRktyDDvK   2天前   7   0   0 .NET
  dQbPnUy2f5dv   2天前   7   0   0 .NET
  aAyUa651a2pd   6天前   72   0   0 .NET
F4Bd6FpL4qNQ