<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
.net core是內建了紀錄檔系統的,本文這裡簡單的介紹一下它的基本用法。如下是一個簡單的範例:
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服務中通過AddLogging的設定紀錄檔服務
通過DI服務獲取ILoggerFactory
通過紀錄檔工廠建立ILogger
通過ILogger寫紀錄檔
需要注意的是,紀錄檔是非同步輸出的,如果呼叫logger.LogInformation後程式馬上結束,是不會有紀錄檔輸出的。
ILogger是我們實際用-來記錄紀錄檔的物件,前面的例子已經演示了它的使用方法,在.net core紀錄檔系統中,還提供了另一個介面ILogger<T>,它的建立方式如下:
var logger = logFactory.CreateLogger<Program>();
ILogger<T>本身也是繼承自ILogger的,也就是說,他們的用法基本一樣,ILogger<T>的主要區別是建立的時候無需制定資料來源名稱,它的資料來源就是類名,也就是說,它和如下方式建立的ILogger功能基本上是一致的。
var logger = logFactory.CreateLogger(typeof(Program).FullName);
那麼為什麼要建立一個ILogger<T>呢?我個人認為應為因為獲取它是不需要制定引數,更容易和DI框架整合,我們可以通過如下程式碼獲取ILogger<T>,而不需要先獲取ILoggerFactory
var logger = provider.GetService<ILogger<Program>>();
.net core的紀錄檔系統支援不同的紀錄檔框架,並且對外統一了紀錄檔的格式,不管使用哪種庫,它的格式是一樣的。這樣的好處是切換紀錄檔框架時,上層應用無需修改。一個基本的紀錄檔樣例為:
info: MyLogger[0]
hello world. 03/23/2019 22:37:58
它主要包括如下幾個部分:
紀錄檔級別: 紀錄檔級別定義在LogLevel列舉中,它包含如下幾個級別:Trace、Debug、Information、Warning、Error、Critical。另外還有一個特殊級別None,它的值比Critical還高,主要用於關閉紀錄檔輸出, 當設定最小輸出級別時None時,由於它的級別比Critical還高,則所有的紀錄檔都不會輸出。
紀錄檔源: 用於標誌紀錄檔的資料來源,它是一個字串,儲存在具體的ILog物件中,本例中就是"MyLogger"
事件Id: 它標誌了紀錄檔的序列號,大部分的時候都不會用到它
紀錄檔體: 紀錄檔內容
ASP.NET Core 內建瞭如下幾種紀錄檔提供程式:
控制檯
偵錯
EventSource
EventLog
TraceSource
前面的範例中,如果要增加其他的紀錄檔提供程式,可以在DI框架初始化的時候進行。
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);
雖然系統內建了這些紀錄檔框架比較方便,但實際上用起來是不夠用的,比如說它不能輸出到檔案,不過好在.net core提供了比較強大的擴充套件機制。
採用同樣的方式,我們也可以使用NLog、Seriallog等更為專業的紀錄檔框架,甚至他們已經做好了適配,直接拿來用都可以。
elmah.io
Gelf
JSNLog
KissLog.net
Loggr
NLog
Sentry
Serilog
Stackdriver
一個典型的紀錄檔系統的組態檔如下:
{ "Logging": { "LogLevel": { // 表示全域性 "Default": "Warning" // 不指定CategoryName,應用於所有Category }, "Console": { // 指定 ProviderName,僅針對於 ConsoleProvider "Default": "Warning", "Microsoft": "Error" // 指定CategoryName為Microsoft的紀錄檔級別為Error } } }
我們可以通過AddConfiguration函數指定紀錄檔組態檔:
var configBuilder = new ConfigurationBuilder().AddJsonFile("appsettings.json"); var config = configBuilder.Build(); var service = new ServiceCollection() .AddLogging(logging => { logging.AddConfiguration(config.GetSection("Logging")); logging.AddConsole(); });
到此這篇關於ASP.NET Core紀錄檔系統的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45