.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/2Method: GETScheme: httpsPathBase:Path: /WeatherForecastAccept: text/plainHost: localhost:7082User-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, brAccept-Language: en-US,en;q=0.9Cookie: [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: 200Content-Type: application/json; charset=utf-8Date: Server: Kestrel

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

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

builder.Services.AddHttpLogging(options =>
{options.RequestHeaders.Add("Cookie");
});

详细的配置如下:

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

结论

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++复习8

C++ this指针详解 this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址)。通过 this,可以访问当前对象的成员变量和成员函数。 所谓当前对象,就是正在使用的对象,例如对于stu.say();,stu 就是当前对象,系统正在访问 stu 的成员函数 say…

自动化测试有感

1、 研究自动化测试也有一段时间了,从不熟悉到慢慢的了解,从不会到会,从迷茫到清晰...... 前段时间一直都很疑惑,为什么要自动化,自动化能给我们带来哪些好处?它存在的价值在哪里?运行一个脚本…

iOS 集合的深复制与浅复制

2019独角兽企业重金招聘Python工程师标准>>> 概念 对象拷贝有两种方式:浅复制和深复制。顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针;深复制是直接拷贝整个对象内存到另一块内存中。 一图以…

linux实时进程优先级rt,Linux实时性- PREEMPT_RT实时抢占实现

作者:Paul E. McKenney翻译整理:土豆丝624原文链接:概述:本篇文章主要讲Linux的实时包PREEMPT_RT 是如何实现的。PREEMPT_RT 的原理PREEMPT_RT包的关键点是要使非抢占式的内核代码量尽可能的少,同时为了提供抢占性而必…

Adb安装程序出现TimeOut错误

为什么80%的码农都做不了架构师?>>> 安装Apk过程中,出现如下错误: Failed to install on device ‘XXX′: timeout 原因时设备速度太卡,导致启动超时,解决办法:延长超时时间。 方法&#xff…

2021.NET大会日程首发!行程亮点全曝光!

{倒计时4天文末有福利→.NET机器人定制抱枕}2021年12月18日由中国各地技术社区共同发起举办、知名企业和开源组织联合协办的2021年中国.NET开发者大会即将盛大开幕▽2020/12/18-12/19主题:开源共建|开放创新|开发赋能形式:线上直播- 长按二维码免费领票 …

C++9

C++类和new、delete操作符 在C++中,你可以像定义变量一样来创建对象,如: Student stu; //对象已被实例化,已分配内存空间,可以使用了 stu.say(); //调用成员函数 这种情况下,系统会在栈区为对象分配内存。栈区是内存中的一块区域,由系统自动分配和释放,程序员无法操控…

一个技术人的知识管理方法论

http://www.cnblogs.com/me-sa/p/my_methodology.html转载于:https://www.cnblogs.com/liushiyong1/p/3556299.html

继Science发文后,Nature也发文评论曹雪涛“误用图片”调查结果

全世界只有3.14 % 的人关注了爆炸吧知识本文转自:募格学术2021年1月26日傍晚 Nature 网站以头条新闻的方式刊出了题为“著名中国免疫学家没有剽窃和学术造假”的新闻并配以曹雪涛的照片,该新闻大篇幅报道了科技部等多部门对于中国工程院院士曹雪涛的联合…

linux运行.pak文件,使用game-to-flatpak脚本将商业Linux游戏安装程序转换为Flatpak应用程序...

现在有一个新的脚本,它允许你将各种商业Linux游戏的安装程序转换成可以在各种GNU/Linux发行版上运行的Flatpak软件包。这是一个开源的shell脚本,由GNOME开发人员Bastien Nocera开发,它做了一件事,即自动将各种格式的商业Linux游戏…

Log4j 2漏洞(CVE-2021-44228)的快速响应

简介2021 年 12 月 9 日,在Log4j的 GitHub 上公开披露了一个影响多个版本的 Apache Log4j 2 实用程序的高严重性漏洞 CVE-2021-44228、CVSSv3 10.0 (https://logging.apache.org/log4j/2.x) 。该漏洞由阿里云安全团队的陈兆军(可能为音译)发现…

Xcode4.5编译ffmpeg成功,过程说明

最近项目要用音视频的通话,需要用ffmpeg来实现,但是ffmpeg在iOS平台上的编译有些问题。 1 下载代码 1.下载ffmpeg源代码 git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 参考:http://ffmpeg.org/download.html 2.下载ffmpeg-iphone…

何时使用[self release]

这样的语句 [self release];乍看上去让人很困惑。 从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样。一般来说,唯一用到,也是最合适使用 [self release];这一写法的地方是在initXXX方法…

C++10

C++友元函数和友元类 一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来补充介绍一个例外——友元(friend)。 fnend 的意思是朋友,或者说是好友,与好友的关系显然要比…

box2d 绘制圆

在让刚体听我的——ApplyForce、ApplyImpulse、SetLinearVelocity一节中,来自天地会的sxl001问道如何创建圆形的边界(Round Boundary),好吧,我用这个教程来回答他。 实际上Box2D中没有专门创建圆弧的API (b2CircleDef创建的是实体圆形不是圆弧…

linux浏览器不能播放音频文件夹,在html中插入音频文件在浏览器中播放音频文件的兼容性问题...

下面谈谈本人在html中插入音频文件,经过我的本地测试总结的一些问题(播放mp3文件):1、问题:IE8上正常(通过media player插件来播放)但在IE6和IE7上不会播放Firefox上要安装QuickTime插件才能播放Chrome通过将其转化成html5上的标签播放&#…

如何让 Timer 在特定时间点触发?

咨询区 Behrooz Karjoo我的应用程序需要做一个 事件触发 的功能,它需要每天定时执行,比如说当天的 16点,我现在的做法是使用一个 timer 按秒轮询判断当前是否为 16:00, 虽然可以玩得转,但我想能不能实现那种 16:00 自动…

深入剖析Android系统

深入剖析Android系统(基于Google发布的Jelly Bean原始代码,讲述Android系统的内部静态结构关系和内部运行机制,为你呈现原汁原味的Android代码分析大餐!) 杨长刚著 ISBN 978-7-121-19374-3 2013年1月出版 定价&#xf…