ASP.NET擴充套件庫之Http日誌

xfrog發表於2021-04-12

    最佳實踐都告訴我們不要記錄請求的詳細日誌,因為這有安全問題,但在實際開發中,請求的詳細內容對於快速定位問題卻是非常重要的,有時也是系統的強力證據。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

相關文章