ASP.NET Core擴(kuò)展庫之Http日志的使用詳解
最佳實(shí)踐都告訴我們不要記錄請(qǐng)求的詳細(xì)日志,因?yàn)檫@有安全問題,但在實(shí)際開發(fā)中,請(qǐng)求的詳細(xì)內(nèi)容對(duì)于快速定位問題卻是非常重要的,有時(shí)也是系統(tǒng)的強(qiáng)力證據(jù)。Xfrogcn.AspNetCore.Extensions擴(kuò)展庫提供了服務(wù)端和客戶端的詳細(xì)日志功能,通過配置可以開啟。
服務(wù)端日志通過請(qǐng)求中間件來完成,中間件會(huì)以Trace級(jí)別記錄請(qǐng)求和應(yīng)答詳情,以Debug級(jí)別記錄請(qǐng)求耗時(shí)。服務(wù)的請(qǐng)求日志的名稱為ServerRequest.Logger
要開啟服務(wù)端詳情日志,只需將擴(kuò)展庫配置中的ServerRequestLevel屬性設(shè)置為Verbose級(jí)別,該配置默認(rèn)是Information,故不會(huì)記錄請(qǐng)求詳情及請(qǐng)求耗時(shí)。
開啟請(qǐng)求詳情后,由于需要讀取請(qǐng)求和應(yīng)答的詳細(xì)內(nèi)容,對(duì)性能將有所影響。同時(shí),由于要讀取請(qǐng)求體,將自動(dòng)開啟請(qǐng)求的緩沖。只有在需要記錄詳細(xì)日志時(shí),才會(huì)讀取詳情,故關(guān)閉后對(duì)于性能不會(huì)產(chǎn)生太大影響。
客服端的請(qǐng)求詳細(xì)日志,是基于IHttpClientFactory以及HttpClient框架,在客戶端請(qǐng)求管道處理中加入了日志記錄管道。請(qǐng)求處理管道會(huì)以Trace級(jí)別記錄請(qǐng)求和應(yīng)答詳情,另外,如果請(qǐng)求發(fā)生異常,將以Error級(jí)別記錄異常詳情。客戶端請(qǐng)求日志的名稱為ClientRequest.Logger
要開啟客戶端請(qǐng)求詳細(xì)日志,只需將擴(kuò)展庫配置中的EnableClientRequestLog設(shè)置為true,同時(shí)將ClientRequestLevel設(shè)置為Verbose,該設(shè)置的默認(rèn)值為Information。與服務(wù)端一樣,只有在符合條件時(shí)才會(huì)記錄請(qǐng)求與應(yīng)答詳情,故如果未開啟,對(duì)性能不會(huì)產(chǎn)生影響。注意,當(dāng)EnableClientRequestLog設(shè)置為false時(shí),擴(kuò)展庫不會(huì)將日志請(qǐng)求管道插入客戶端請(qǐng)求管道中。該設(shè)置默認(rèn)為true。
一、開啟服務(wù)端請(qǐng)求日志
要在服務(wù)端開啟請(qǐng)求詳細(xì)日志,只需引用Xfrogcn.AspNetCore.Extensions庫,然后在Startup類中,配置服務(wù)請(qǐng)求級(jí)別為Verbose:
public void ConfigureServices(IServiceCollection services)
{
services.AddExtensions(Configuration, config=>
{
config.FileLog = true;
config.ConsoleLog = true;
// 設(shè)置服務(wù)端請(qǐng)求日志級(jí)別為Verbose
config.ServerRequestLevel = Serilog.Events.LogEventLevel.Verbose;
});
services.AddControllers();
}
二、開啟客戶端請(qǐng)求日志
要開啟客戶端日志,只需引用Xfrogcn.AspNetCore.Extensions庫,然后在Startup類中,配置ClientRequestLevel為Verbose, EnableClientRequestLog設(shè)置為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();
}
}
三、示例
詳細(xì)示例請(qǐng)參考GitHub
Xfrogcn.AspNetCore.Extensions地址:GitHub Gitee
以上就是ASP.NET Core擴(kuò)展庫之Http日志的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于ASP.NET Core擴(kuò)展庫之Http日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- ASP.NET?Core記錄日志
- ASP.Net?Core中的日志與分布式鏈路追蹤
- ASP.NET Core使用NLog記錄日志
- ASP.NET Core使用Log4net實(shí)現(xiàn)日志記錄功能
- ASP.NET Core使用NLog輸出日志記錄
- ASP.NET Core擴(kuò)展庫之日志功能的使用詳解
- Asp.Net Core用NLog記錄日志操作方法
- Asp.Net Core輕松學(xué)之利用日志監(jiān)視進(jìn)行服務(wù)遙測(cè)詳解
- ASP.NET Core開發(fā)教程之Logging利用NLog寫日志文件
- ASP.NET Core 2.0 WebApi全局配置及日志實(shí)例
- 詳解ASP.NET Core應(yīng)用中如何記錄和查看日志
- ASP.NET?Core使用自定義日志中間件
相關(guān)文章
linq to sql中,如何解決多條件查詢問題,答案,用表達(dá)式樹!
有個(gè)小項(xiàng)目中,用到了linq to sql,既然這樣,想必需要做多條件組合查詢了,雖然我對(duì)表達(dá)式樹的研究也只是寥寥地,但除此方法,似乎別無他法,只好硬著頭皮研究一下.2011-08-08
.NET實(shí)現(xiàn)異步編程async和await
這篇文章介紹了.NET實(shí)現(xiàn)異步編程async和await的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03
asp.net 數(shù)據(jù)類型轉(zhuǎn)換類代碼
asp.net 數(shù)據(jù)類型轉(zhuǎn)換類代碼,需要的朋友可以參考下2012-06-06
ASP.Net項(xiàng)目中實(shí)現(xiàn)微信APP支付功能
這篇文章介紹了ASP.Net項(xiàng)目中實(shí)現(xiàn)微信APP支付功能的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
詳解.net core webapi 前后端開發(fā)分離后的配置和部署
這篇文章主要介紹了.net core webapi 前后端開發(fā)分離后的配置和部署,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
獲取ashx得到的內(nèi)容(已處理好的數(shù)據(jù))
獲取ashx得到的內(nèi)容,一般用于ajax的情況比較多一點(diǎn);重點(diǎn):ashx頁面?zhèn)鬟^來的就是已經(jīng)處理好的數(shù)據(jù),感興趣的朋有可以參考下啊,希望本文對(duì)你學(xué)習(xí)ajax有所幫助2013-01-01

