ASP.NET?Core的日志系統(tǒng)介紹
.net core是內(nèi)置了日志系統(tǒng)的,本文這里簡單的介紹一下它的基本用法。如下是一個(gè)簡單的示例:
var service = new ServiceCollection() .AddLogging(logging => { logging.AddConsole(); }); var provider = service.BuildServiceProvider(); var logFactory = provider.GetService<ILoggerFactory>(); var logger = logFactory.CreateLogger("MyLogger"); logger.LogInformation("hello world. {0}", DateTime.Now);
主要步驟如下:
在DI服務(wù)中通過AddLogging的配置日志服務(wù)
通過DI服務(wù)獲取ILoggerFactory
通過日志工廠創(chuàng)建ILogger
通過ILogger寫日志
需要注意的是,日志是異步輸出的,如果調(diào)用logger.LogInformation后程序馬上結(jié)束,是不會(huì)有日志輸出的。
ILogger和ILogger<T>
ILogger是我們實(shí)際用-來記錄日志的對(duì)象,前面的例子已經(jīng)演示了它的使用方法,在.net core日志系統(tǒng)中,還提供了另一個(gè)接口ILogger<T>,它的創(chuàng)建方式如下:
var?logger?=?logFactory.CreateLogger<Program>();
ILogger<T>本身也是繼承自ILogger的,也就是說,他們的用法基本一樣,ILogger<T>的主要區(qū)別是創(chuàng)建的時(shí)候無需制定數(shù)據(jù)源名稱,它的數(shù)據(jù)源就是類名,也就是說,它和如下方式創(chuàng)建的ILogger功能基本上是一致的。
var?logger?=?logFactory.CreateLogger(typeof(Program).FullName);
那么為什么要?jiǎng)?chuàng)建一個(gè)ILogger<T>呢?我個(gè)人認(rèn)為應(yīng)為因?yàn)楂@取它是不需要制定參數(shù),更容易和DI框架集成,我們可以通過如下代碼獲取ILogger<T>,而不需要先獲取ILoggerFactory
var?logger?=?provider.GetService<ILogger<Program>>();
日志結(jié)構(gòu)
.net core的日志系統(tǒng)支持不同的日志框架,并且對(duì)外統(tǒng)一了日志的格式,不管使用哪種庫,它的格式是一樣的。這樣的好處是切換日志框架時(shí),上層應(yīng)用無需修改。一個(gè)基本的日志樣例為:
info: MyLogger[0]
hello world. 03/23/2019 22:37:58
它主要包括如下幾個(gè)部分:
日志級(jí)別: 日志級(jí)別定義在LogLevel枚舉中,它包含如下幾個(gè)級(jí)別:Trace、Debug、Information、Warning、Error、Critical。另外還有一個(gè)特殊級(jí)別None,它的值比Critical還高,主要用于關(guān)閉日志輸出, 當(dāng)配置最小輸出級(jí)別時(shí)None時(shí),由于它的級(jí)別比Critical還高,則所有的日志都不會(huì)輸出。
日志源: 用于標(biāo)志日志的數(shù)據(jù)源,它是一個(gè)字符串,保存在具體的ILog對(duì)象中,本例中就是"MyLogger"
事件Id: 它標(biāo)志了日志的序列號(hào),大部分的時(shí)候都不會(huì)用到它
日志體: 日志內(nèi)容
日志提供程序
ASP.NET Core 內(nèi)置了如下幾種日志提供程序:
控制臺(tái)
調(diào)試
EventSource
EventLog
TraceSource
前面的示例中,如果要增加其他的日志提供程序,可以在DI框架初始化的時(shí)候進(jìn)行。
var service = new ServiceCollection() .AddLogging(logging => { logging.AddConsole(); }); var provider = service.BuildServiceProvider(); var logFactory = provider.GetService<ILoggerFactory>(); var logger = logFactory.CreateLogger("MyLogger"); logger.LogInformation("hello world. {0}", DateTime.Now);
雖然系統(tǒng)內(nèi)置了這些日志框架比較方便,但實(shí)際上用起來是不夠用的,比如說它不能輸出到文件,不過好在.net core提供了比較強(qiáng)大的擴(kuò)展機(jī)制。
采用同樣的方式,我們也可以使用NLog、Seriallog等更為專業(yè)的日志框架,甚至他們已經(jīng)做好了適配,直接拿來用都可以。
elmah.io
Gelf
JSNLog
KissLog.net
Loggr
NLog
Sentry
Serilog
Stackdriver
Log配置文件
一個(gè)典型的日志系統(tǒng)的配置文件如下:
{ "Logging": { "LogLevel": { // 表示全局 "Default": "Warning" // 不指定CategoryName,應(yīng)用于所有Category }, "Console": { // 指定 ProviderName,僅針對(duì)于 ConsoleProvider "Default": "Warning", "Microsoft": "Error" // 指定CategoryName為Microsoft的日志級(jí)別為Error } } }
我們可以通過AddConfiguration函數(shù)指定日志配置文件:
var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); var config = configBuilder.Build(); var service = new ServiceCollection() .AddLogging(logging => { logging.AddConfiguration(config.GetSection("Logging")); logging.AddConsole(); });
到此這篇關(guān)于ASP.NET Core日志系統(tǒng)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Repeater事件OnItemCommand取得行內(nèi)控件的方法
這篇文章主要介紹了Repeater事件OnItemCommand取得行內(nèi)控件的方法,有需要的朋友可以參考一下2014-01-01WebForm獲取checkbox選中的值(幾個(gè)簡單的示例)
WebForm中用checkbox的地方挺多的,下面寫了幾個(gè)簡單的例子,方便以后學(xué)習(xí)使用2014-07-07ASP.NET實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了ASP.NET實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-11-11asp.net實(shí)現(xiàn)DropDownList,TreeView,ListBox的無限極分類目錄樹
這篇文章主要介紹了asp.net實(shí)現(xiàn)DropDownList,TreeView,ListBox的無限極分類目錄樹,結(jié)合實(shí)例形式較為詳細(xì)的分析了asp.net常見控件實(shí)現(xiàn)無限極分類目錄樹的具體實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-06-06深入解析.NET 許可證編譯器 (Lc.exe) 的原理與源代碼剖析
許可證編譯器 (Lc.exe) 的作用是讀取包含授權(quán)信息的文本文件,并產(chǎn)生一個(gè)可作為資源嵌入到公用語言運(yùn)行庫可執(zhí)行文件中的 .licenses 文件2013-07-07ASP.NET中動(dòng)態(tài)控制RDLC報(bào)表
ASP.NET中動(dòng)態(tài)控制RDLC報(bào)表...2006-09-09Entity?Framework管理一對(duì)一實(shí)體關(guān)系
本文詳細(xì)講解了Entity?Framework管理一對(duì)一實(shí)體關(guān)系的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03