轉發時請註明原創做者及地址,不然追究責任。
原創:alunchengit
當咱們建立一個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。
當咱們須要擴展日誌以本身的邏輯記錄到文件、隊列、MySql、Mongodb等持久化時,能夠擴展類庫,擴展也很簡單。
對於mongodb擴展類庫,nuget上也有個包,可是此包只能知足通常的需求,對於複雜的需求還不能知足,須要用戶本身擴展本身的邏輯。
此包是對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。
注意,咱們在WriteLog方法中寫日誌,記錄到mongodb中,此方法實現的是咱們須要自定義的邏輯。這裏把日誌經過實體方法,持久化。
爲什麼要繼承IWriteLog?由於咱們須要用到本身的邏輯,繼承此類爲了使用DI/IOC時,能夠直接注入繼承IWriteLog的類。
衆所周知,使用DI/IOC時。有一好處,全部的對象都存放在容器上,若是須要修改容器裏面對象,則能夠經過注入的方式修改。對於繼承,咱們能夠注入接口與實現類的方式,靈活變動實現類。
因此,咱們須要在容器上初始化IWriteLog與MongoDbWriteLog的關係。
3)添加擴展配置
咱們主要看初始化mongodb的writelog配置,這裏在容器中注入了IWriteLog, MongoDbWriteLog的繼承關係。
如何使用?
很簡單,可查看WebApplicationDemo.MongoDb中,加入Mongdb的配置便可:
擴展類庫的原理
使用依賴注入,注入咱們須要的Log邏輯類,如Mongdb中的MongoDbWriteLog。因此,須要擴展,只須要繼承IWriteLog,而且注入,就能擴展類了,很方便。
讀了本編文章的上部分時,慢慢會發現,使用Log擴展,就行完積木遊戲同樣,你想怎麼‘組合’、怎麼‘拆’均可以。若是你想把Log保存在隊列,即實現IWriteLog,而且注入到容器中便可。若是你想把Log保存在Mongodb,同樣的邏輯。因此,任意地組合,很方便。
以上,都是Net Core正在發展的方向:低耦合、高內聚。在Log中提現了。而且默認自帶了依賴注入,依賴注入的好處有不少,可查看本人的依賴注入文章系列。
能夠關注本人的公衆號,多年經驗的原創文章共享給你們。