<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在上一篇中,我們通過學習瞭解在.net core 中內建的紀錄檔記錄中的幾大核心要素,在紀錄檔工廠記錄器(ILoggerFactory
)中實現將紀錄檔記錄提供器(ILoggerProvider
)物件都可以整合到Logger
物件組合中,這樣的話,我們就可以通過基於ILoggerProvider
自定義紀錄檔記錄程式整合到Logger
中,再建立寫紀錄檔定義Ilogger
,自定義紀錄檔記錄器實現紀錄檔的輸出方式,這樣實現自定義紀錄檔記錄工具。
在這個過程中,紀錄檔記錄器ILogger
中的Log()方法會記錄執行紀錄檔,通過在ILoggerFactory
產生的是ILogger
型別(也就是我們最終使用的Logger
),其Log()方法是依次呼叫Logger
中包含的LoggerInformation[]
陣列中的ILogger
。而ILoggerProvider
產生的為各類不同的XxxLogger(也就是上面說的Logger
中的LoggerInformation
陣列包含的如ConsoleLogger、DebugLogger
),其Log()方法是把紀錄檔寫到具體的目標上去,所以我們自定義的紀錄檔程式也可以在紀錄檔記錄器工廠中實現新增紀錄檔程式,達到將紀錄檔寫到具體目標的作用。
所以下文我們通過自定義的方式實現ILogger
、ILoggerProvider
兩個介面來實現我們自己想要的紀錄檔記錄程式,實現自定義輸出目標方式。(下文只是簡單的根據介面自定義實現輸出紀錄檔記錄到控制檯的demo)
建立一個自定義Logger,目的是將指定的等級紀錄檔輸出到控制檯。所以我們建立一個ExtensionLogger
的類,指定輸出的紀錄檔等級。所以在這之前,我們需要設定一下輸入紀錄檔的等級,因此我們需要增加一個等級的設定類ExtensionsConfiguration
。
在ExtensionsConfiguration
中,
public class ExtensionsConfiguration { /// <summary> /// 紀錄檔等級 /// </summary> public LogLevel LogLevel { get; set; } = LogLevel.Warning; }
再自定義紀錄檔記錄類ExtensionLogger
,實現介面ILogger
,
public class ExtensionsLogger : ILogger { private readonly ExtensionsConfiguration _config; public ExtensionsLogger(ExtensionsConfiguration extensionsConfiguration) { _config = extensionsConfiguration; } public IDisposable BeginScope<TState>(TState state) { return null; } public bool IsEnabled(LogLevel logLevel) { return logLevel == _config.LogLevel; } public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) { if (!IsEnabled(logLevel)) { return; } Console.WriteLine($" {logLevel} - {eventId.Id} : " + formatter(state, exception)); } }
根據ILogger
介面實現,其中實現Log()
介面方法,將紀錄檔輸出到指定目標,這裡是輸出到控制檯,在設定了紀錄檔等級的情況條件下,當滿足條件後,才能輸出對應的紀錄檔。
在建立了紀錄檔輸出記錄後,我們同時需要提供一個紀錄檔程式來增加和建立上面的Logger
記錄,所以我們通過自定義紀錄檔提供器類ExtensionsLoggerProvider
,實現ILoggerProvider
類。
public class ExtensionsLoggerProvider : ILoggerProvider { private readonly ExtensionsConfiguration _config; public ExtensionsLoggerProvider(ExtensionsConfiguration extensionsConfiguration) { _config = extensionsConfiguration; } public ILogger CreateLogger(string categoryName) { return new ExtensionsLogger(_config); } public void Dispose() { } }
基於ILoggerProvider
介面實現自定義類,實現方法CreateLogger
,來建立上面的紀錄檔記錄。
在Startup.cs中,通過Configure
方法呼叫設定紀錄檔記錄。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env , ILoggerFactory loggerFactory) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 注入ILogggerFactory,然後設定引數 //新增紀錄檔等級 loggerFactory.AddProvider(new ExtensionsLoggerProvider(new ExtensionsConfiguration { LogLevel= LogLevel.Warning })); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
在此之前,我們可以清空預設的設定,然後根據紀錄檔等級,在控制檯中輸出對應的紀錄檔記錄。
在等級為Information
情況下,輸出效果如下:
這個就是我們通過自定義的方式實現的按紀錄檔等級輸出的記錄。
第一步:為LoggerFactory擴張一個方法,提供增加紀錄檔寫檔案方式的入口。相關的設定來自appsettings.json
第二步:實現我們的logger提供程式,實現ILoggerProvider介面,關鍵方法CreateLogger,建立真正寫紀錄檔的logger。對當前的logger可以做適當的快取,設定logger
第三步:實現我們的logger,實現ILogger介面。真正將log寫入file。
這裡可以參考網友的資料 :.Net Core Logger 實現log寫入本地檔案系統
上文中,我們通過自定義的方式實現了根據紀錄檔等級將紀錄檔記錄輸出到指定目標的方式,在這種基礎上,我們可以根據具體的需求做完善修改,實現自己的紀錄檔記錄輸出方式。
除了我們通過自定義的方式之外,我們也可以借用第三方紀錄檔框架元件程式進行使用,根據拓展方法進行呼叫,在後續中我們會使用第三方紀錄檔記錄程式來實現紀錄檔記錄的輸出。
如果有不對的或不理解的地方,希望大家可以多多指正,提出問題,一起討論,不斷學習,共同進步。
本文專案原始碼下載
到此這篇關於.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