在.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/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//啟用Http Logging
app.UseHttpLogging();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
啟用後運作代碼,然後通路一個接口,控制台就會列印出HttpLogging日志:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CM5kjM4YjZhNWY5kDNzQGOxYzXzUTOxMjMxEzLcFTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
在預設情況下,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");
});