天天看點

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

本節我們來看看ASP.NET Core MVC中比較常用的功能,對于導入和導出目前仍在探索中,項目需要自定義列合并,是以事先探索了如何在ASP.NET Core MVC進行導入、導出,更進階的内容還需等我學習再給出。

在學習ASP.NET Core MVC之前我們來看看在EF Core中如何更新對象指定屬性,這個問題之前我們已經探讨過,但是還是存在一點問題,請往下看。

上述方法可以用來更新對象指定屬性,使用lambda來指定需要更新的屬性,如下:

但是當更新數值類型時會解析不到該屬性,如下:

此時得到該屬性名稱為空字元串

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

lambda為何解析不到呢?原來它進行了Convert如下:

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

既然是将其轉換成了Convert,那麼在表達式樹中應該用其節點類型,如下:

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

此時我們需要判斷其節點類型是否已經經過Convert即可,最終代碼如下:

此時将能正确解析到數值類型名稱,如下:

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

為何要封裝這一層,隻是不想首先查詢出對象然後再來進行更新屬性,其兩步操作合并為一步豈不爽哉。當然我們也可以不通過lambda來實作,直接給出屬性集合,然後周遊即可,大概如下:

目前比較流行的日志架構則是Log4net、NLog,之前也一直用的Log4net,但是在.net core中已經内置了日志架構Serilog,在github上也已加星不少,想必比較強大,既然這樣為何不使用内置的呢,免去再用其他日志架構還要配置的麻煩。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

建立預設項目在Startup中已經注入日志,如下:

當利用dotnet.exe調試時在控制台會顯示調試各種資訊,要是直接運作那該如何呢?在web中的配置檔案web.config中,如下:

我們需要設定 stdoutLogEnabled="true" 來啟動調試,此時運作項目你會發現屁都沒有,此時我們檢視windows日志發現根本無法建立檔案夾,想必是沒有權限的緣故。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

此時我們需要手動建立logs檔案夾,最終運作程式則會自動将所有資訊寫入到日志檔案中,如下:

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

是不是這樣就完了呢,這樣設定則會将所有資訊都會寫入日志那樣豈不是額外做些無用功,看看如下生成的日志。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

光說不練假把式,來,我們來實作一個,讓你見識見識Serilog的強大。先定義一個自定義輸出格式的Option并建立輸出日志檔案夾。

内置實作日志的接口.net core已經給出,是以我們需要擷取内置日志接口服務并實作自定義擴充方法。

此時上述app來源于 IApplicationBuilder 此時我們則隻需要實作該接口的自定義擴充方法。我們開始下載下傳Serilog程式包

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

此時我們需要對日志通過 LoggerConfiguration 類進行初始化配置。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

接下來則是将日志寫到檔案中我們可以自定義格式,此時再下載下傳如下程式包。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

裡面有個 RollingFile 方法來自定輸出日志模闆,自此我們就有了如下代碼:

我們擷取.net core内置的日志接口服務。

同時設定我們輸出日志的路徑選項。

接下來将Serilog建立的日志添加到内置日志服務中,如下:

當然上述AddSerilog方法時擴充方法,此時我們仍需要添加如下擴充程式包:

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

最後還差一步則是日志的生命周期,灰常重要,為什麼說灰常重要,我們要確定當程式關閉時或者系統出問題時所有在記憶體緩沖區的日志都将輸送到日志檔案夾中,如下:

一氣呵成,最終我們在Startup的如下方法中進行調用即可:

利用Serilog添加自定日志格式輸出,進行如下調用:

當然還有其他強大功能,比如Serilog中可以擷取到上下文,這樣的話我們就可以過濾對于那個應用程式使用對應的日志輸出級别以及其他,如下:

說一千到一萬,出現結果才是真理,我們一起來看看。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

看看日志輸出資訊,你會看到幹淨的日志輸出。

ASP.NET Core MVC之Serilog日志處理,你了解多少?前言

本節我們詳細講解了.net core中新生代日志架構-Serilog,别抱着Log4net不放了,Serilog你值得擁有,跟着老大一直學習中,漲漲見識!因為項目中會用到批量導入和導出,是以在研究導出、導入,下節可能會講到導入、導出在ASP.NET Core MVC中,也有可能會講SQL Server中的最後幾節關于死鎖的内容,不管怎樣都是在積累知識,你說呢,敬請期待!