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

  • 使用HttpLogging中间件记录接口请求日志已关闭评论
  • 116 次浏览
  • A+
所属分类:.NET技术
摘要

添加使用,注意中间件顺序记得在appsettings.json的”LogLevel”中设置这个更多配置详解参见官方教程


介绍

  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" 

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

问题

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