写点什么

.NET6 新东西 --Http Logging

作者:喵叔
  • 2021 年 11 月 11 日
  • 本文字数:1086 字

    阅读完需:约 4 分钟

在.NET6 中引入了一个日志中间件,Http Logging 中间件。我们可以使用这个中间件监控并记录请求和响应信息。这个 Http Logging 中间件算是.NET6 中比较简单的,因此我们之间看怎么使用。首先我们要启用 Http Logging,我们在 Program.cs 文件中增加如下代码:


var builder = WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllers();// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();var app = builder.Build();// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment()){    app.UseSwagger();    app.UseSwaggerUI();}//启用Http Loggingapp.UseHttpLogging();app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();
复制代码


启用后运行代码,然后访问一个接口,控制台就会打印出 HttpLogging 日志:



在默认情况下,HttpLoggingMiddleware 只会记录请求和响应的基本信息,比如请求地址、请求头、协议版本以及响应状态和响应头等。对于那些不是默认列表中的请求头和响应头,对应的值会显示为 Readected,如果需要记录它们,就必须配置 HttpLoggingOptions,一般情况下都是在注册服务的时候进行配置:


builder.Services.AddHttpLogging(options =>{    options.RequestHeaders.Add("Cache-Control");    options.ResponseHeaders.Add("Server");});
复制代码


重启服务并请求一个接口后日志输出如下图:



在图中我们可以看到请求头中的 Cache-Control 和响应头中的 Server 都显示出了值。同理,我们自定义的请求头和响应头也可以在这里配置,本文在这里就不再举例。那么,一定会有同学问,如果我需要显示所有的响应头和请求头该怎么做呢?总不能把每个头都配置一遍吧。其实微软为我们已经解决了这个问题,可以通过加入如下配置解决:


uilder.Services.AddHttpLogging(options =>{    //显示所有头信息    options.LoggingFields = HttpLoggingFields.All;    options.RequestHeaders.Add("Cache-Control");    options.ResponseHeaders.Add("Server");});
复制代码


运行代码并请求一个接口,我们就可以看到所有响应头和请求头的值都显示了出来。但是这里需要提醒的是 HttpLoggingFields.All 对性能有影响,在实际项目中不建议这个使用。好了,今天就讲这么多,本文主要讲了常用的内容,更多关于 Http Logging 的内容可以参阅微软文档。


Tip:目前 Http Logging 只能记录 Information 级别的日志,我们无法根据响应状态来动态配置日志级别。

发布于: 19 小时前阅读数: 5
用户头像

喵叔

关注

还未添加个人签名 2020.01.14 加入

还未添加个人简介

评论

发布
暂无评论
.NET6新东西--Http Logging