最佳實踐都告訴我們不要記錄請求的詳細日志,因為這有安全問題,但在實際開發中,請求的詳細內容對于快速定位問題卻是非常重要的,有時也是系統的強力證據,Xfrogcn.AspNetCore.Extensions擴展庫提供了服務端和客戶端的詳細日志功能,通過配置可以開啟,
服務端日志通過請求中間件來完成,中間件會以Trace級別記錄請求和應答詳情,以Debug級別記錄請求耗時,服務的請求日志的名稱為ServerRequest.Logger
要開啟服務端詳情日志,只需將擴展庫配置中的ServerRequestLevel屬性設定為Verbose級別,該配置默認是Information,故不會記錄請求詳情及請求耗時,
開啟請求詳情后,由于需要讀取請求和應答的詳細內容,對性能將有所影響,同時,由于要讀取請求體,將自動開啟請求的緩沖,只有在需要記錄詳細日志時,才會讀取詳情,故關閉后對于性能不會產生太大影響,
客服端的請求詳細日志,是基于IHttpClientFactory以及HttpClient框架,在客戶端請求管道處理中加入了日志記錄管道,請求處理管道會以Trace級別記錄請求和應答詳情,另外,如果請求發生例外,將以Error級別記錄例外詳情,客戶端請求日志的名稱為ClientRequest.Logger
要開啟客戶端請求詳細日志,只需將擴展庫配置中的EnableClientRequestLog設定為true,同時將ClientRequestLevel設定為Verbose,該設定的默認值為Information,與服務端一樣,只有在符合條件時才會記錄請求與應答詳情,故如果未開啟,對性能不會產生影響,注意,當EnableClientRequestLog設定為false時,擴展庫不會將日志請求管道插入客戶端請求管道中,該設定默認為true,
一、開啟服務端請求日志
要在服務端開啟請求詳細日志,只需參考Xfrogcn.AspNetCore.Extensions庫,然后在Startup類中,配置服務請求級別為Verbose:
public void ConfigureServices(IServiceCollection services)
{
services.AddExtensions(Configuration, config=>
{
config.FileLog = true;
config.ConsoleLog = true;
// 設定服務端請求日志級別為Verbose
config.ServerRequestLevel = Serilog.Events.LogEventLevel.Verbose;
});
services.AddControllers();
}
二、開啟客戶端請求日志
要開啟客戶端日志,只需參考Xfrogcn.AspNetCore.Extensions庫,然后在Startup類中,配置ClientRequestLevel為Verbose, EnableClientRequestLog設定為true,
class Program
{
static async Task Main(string[] args)
{
IServiceCollection services = new ServiceCollection()
.AddExtensions(null, config =>
{
config.EnableClientRequestLog = true;
config.ClientRequestLevel = Serilog.Events.LogEventLevel.Verbose;
config.ConsoleLog = true;
});
IServiceProvider provider = services.BuildServiceProvider();
var clientFactory = provider.GetRequiredService<IHttpClientFactory>();
HttpClient client = clientFactory.CreateClient();
var response = await client.GetAsync("http://localhost:5000/weatherforecast");
Console.ReadLine();
}
}
三、示例
詳細示例請參考GitHub
Xfrogcn.AspNetCore.Extensions地址:GitHub Gitee
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/275290.html
標籤:.NET Core
