1. 程式人生 > >在AspNetCore中擴展Log系列 - 介紹開源類庫的使用(一)

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

net git 啟動 col debug trac 但是 clas ddd

轉發時請註明原創作者及地址,否則追究責任。

原創:alunchen

當創建AspNetCore項目時

當我們創建一個AspNetCore項目時,需要我們手動添加Log:

services.AddLoging();

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

使用類庫

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

類庫地址信息

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

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

怎麽使用此類庫?

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

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上也有個包,但是此包只能滿足一般的需求,對於復雜的需求還不能滿足,需要用戶自己擴展自己的邏輯。

以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。

技術分享圖片

註意,我們在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中提現了。並且默認自帶了依賴註入,依賴註入的好處有很多,可查看本人的依賴註入文章系列。

可以關註本人的公眾號,多年經驗的原創文章共享給大家。

技術分享圖片

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