在AspNetCore中擴展Log系列 - 介紹開源類庫的使用(一)

轉發時請註明原創做者及地址,不然追究責任。

原創:alunchengit

 

當建立AspNetCore項目時

      當咱們建立一個AspNetCore項目時,須要咱們手動添加Log: github

services.AddLoging();mongodb

      咱們發現,Log在微軟原生的包Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Configuration內。而且建立ASPNetCore項目時,NetCore SDK已經包括了這兩個Log的原生包。 spa

 

使用類庫

      目前本人在微軟原生日誌類庫的基礎之上,寫了一個Log的擴展。目的是爲了更好地擴展Log。當咱們須要自定義本身的Log記錄方式時,使用此庫是你的明智選擇。 3d

類庫地址信息 日誌

Nuget地址:https://www.nuget.org/packages/Alun.AspNetCore.Log.Extensionscode

GitHub開源地址:https://github.com/cjt321/Alun.AspNetCore.Log.Extensionsorm

怎麼使用此類庫? 對象

      首先,引用Nuget包的地址。在項目啓動時,添加Log的配置。 blog

services.AddLogging(cfg =>

{

cfg.AddNvLog(new LogConfiguration(){UseTraceLog = false, UseDebugLog = true, UseInformationLog = true, UseErrorLog = true, UseCriticalLog = true})

.AddDefaultWriteLog();

});

      在AddNvLog方法中,Log級別可配置:UseTraceLog、UseDebugLog、UseInformationLog、UseErrorLog、UseCriticalLog。 若是爲true,則執行相應的Log。

那麼何時記錄Log呢?

      很簡單,就像咱們平時在NetCore中記錄Log同樣便可,無任何修改。可在源碼WebApplicationDemo中看到記錄Log。

clipboard

擴展類庫

      當咱們須要擴展日誌以本身的邏輯記錄到文件、隊列、MySql、Mongodb等持久化時,能夠擴展類庫,擴展也很簡單。

      對於mongodb擴展類庫,nuget上也有個包,可是此包只能知足通常的需求,對於複雜的需求還不能知足,須要用戶本身擴展本身的邏輯。

以Alun.AspNetCore.Log.Extensions.MongoDb爲例

      此包是對Log保存在Mongodb中。

      此包在Nuget:https://www.nuget.org/packages/Alun.AspNetCore.Log.Extensions.MongoDb

      1)安裝Alun.AspNetCore.Log.Extensions的nuget,由於這裏須要用到mongodb,因此安裝MongoDB.Driver。

      2)添加mongodb的writelog類,來繼承IWriteLog。

clipboard[1]

      注意,咱們在WriteLog方法中寫日誌,記錄到mongodb中,此方法實現的是咱們須要自定義的邏輯。這裏把日誌經過實體方法,持久化。

      爲什麼要繼承IWriteLog?由於咱們須要用到本身的邏輯,繼承此類爲了使用DI/IOC時,能夠直接注入繼承IWriteLog的類。

      衆所周知,使用DI/IOC時。有一好處,全部的對象都存放在容器上,若是須要修改容器裏面對象,則能夠經過注入的方式修改。對於繼承,咱們能夠注入接口與實現類的方式,靈活變動實現類。

 

      因此,咱們須要在容器上初始化IWriteLog與MongoDbWriteLog的關係。

      3)添加擴展配置

clipboard[2]

      咱們主要看初始化mongodb的writelog配置,這裏在容器中注入了IWriteLog, MongoDbWriteLog的繼承關係。

如何使用?

      很簡單,可查看WebApplicationDemo.MongoDb中,加入Mongdb的配置便可:

clipboard[3]

擴展類庫的原理

      使用依賴注入,注入咱們須要的Log邏輯類,如Mongdb中的MongoDbWriteLog。因此,須要擴展,只須要繼承IWriteLog,而且注入,就能擴展類了,很方便。

 

總結

      讀了本編文章的上部分時,慢慢會發現,使用Log擴展,就行完積木遊戲同樣,你想怎麼‘組合’、怎麼‘拆’均可以。若是你想把Log保存在隊列,即實現IWriteLog,而且注入到容器中便可。若是你想把Log保存在Mongodb,同樣的邏輯。因此,任意地組合,很方便。

      以上,都是Net Core正在發展的方向:低耦合、高內聚。在Log中提現了。而且默認自帶了依賴注入,依賴注入的好處有不少,可查看本人的依賴注入文章系列。

 

 

 

能夠關注本人的公衆號,多年經驗的原創文章共享給你們。

相關文章
相關標籤/搜索