1. 程式人生 > 程式設計 >.NET 6開發TodoList應用之請求日誌元件HttpLogging介紹

.NET 6開發TodoList應用之請求日誌元件HttpLogging介紹

背景

因為在上篇演示Action Filter的時候可能是因為舉的例子不夠好,有小夥伴在評論區指出.NET 6新增加的特性可以實現在檢視模型繫結之前允許記錄Http請求日誌的元件:HttpLogging。這個元件我之前試過,而Action Filter與其用來記錄日誌,更不如說是為Http請求的接收和響應提供了中間可以修改的機會。

本著讓更多的人瞭解新知識的出發點,這次我們臨時把這個主題加進來。

什麼是HttpLogging?

  1. HttpLogging.NET 6 新加入的一個框架內建的中介軟體
  2. 它允許記錄HTTP請求和響應,可以提供以下資訊的日誌:
    • HTTP請求資訊;
    • 普通屬性;
    • Header資訊;
    • Body資訊;
    • HTTP響應資訊。

什麼時候可以考慮使用HttpLogging?

當你需要記錄HTTP請onYnvz求和響應的資訊或者部分資訊時。

而當你使用它時,又需要注意什麼?

  1. 效能
    當你決定使用 HttpLogging 來記錄請求資訊尤其是Body資訊時,需要仔細考慮僅記錄必要的欄位。當你不確定它會不會對你的程式有效能影響時,你需要進行效能測試。
  2. 隱私
    相比於效能,更容易被我們開發忽略掉的一點(而且是更加重要的一點)是:我們有沒有在日誌中洩露一些個人隱私資料(Personally Identifiable Information,PII)? 敏感資料不應該直接被記錄到日誌中,至少是需要經過加密或者混淆的。

怎麼用

這個中介軟體的用法非常簡單,兩個方法,六個可以配置的選項:

引入中介軟體

Program.csapp.MapControllers();之前新增中介軟體:

  • Program.cs
// 省略其他
app.UseHttpLogging();
app.MapControllers();

當我們使用預設配置的時候,來隨便找一個介面看一下效果:

  • 請求日誌

.NET6開發TodoList應用之請求日誌元件HttpLogging介紹

  • 響應日誌

.NET6開發TodoList應用之請求日誌元件HttpLogging介紹

所有預設配置下不記錄日誌的欄位都以[Redacted]代替,下面我們可以更改預設配置以顯示更多內容:

配置服務

Program.cs

// 省略其他...
builder.Services.AddControllers();
builder.Services.AddHttpLogging(options =>
{
    // 日誌記錄的欄位配置,可以以 | 連線
    options.LoggingFields = HttpLoggingFields.All;
    // 增加請求頭欄位記錄
    options.RequestHeaders.Add("Sec-Fetch-Site");
 
options.RequestHeaders.Add("Sec-Fetch-Mode"); option客棧s.RequestHeaders.Add("Sec-Fetch-Dest"); // 增加響應頭欄位記錄 options.ResponseHeaders.Add("Server"); // 增加請求的媒體型別 options.MediaTypeOptions.AddText("application/"); // 配置請求體日誌最大長度 options.RequestBodyLogLimit = 4096; // 配置響應體日誌最大長度 options.ResponseBodyLogLimit = 4096; });

同樣的請求我們再來看看效果:

  • 請求日誌,注意紅框標記的資訊現在已經顯示了

.NET6開發TodoList應用之請求日誌元件HttpLogging介紹

  • 響應日誌

.NET6開發TodoList應用之請求日誌元件HttpLogging介紹

總結

可以看到,這個中介軟體使用起來是比較簡單的。

參考資料

HTTP Logging in ASP.NET Core

.NET 6 中的 Http Logging 中介軟體

到此這篇關於.NET 6開發TodoList應用之請求日誌元件HttpLogging介紹的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援我們。