[Asp.Net Core Mvc] Part.4 網站記錄logging訊息
每個網站當中,對於系統開發而言,當遇到系統問題,無非是要透過log訊息來了解狀況,因為不可能對正式環境運作中的系統直接進行測試,這樣對於使用者而言,那會是一個很不明智的做法,甚至,對於一個新進網站使用者而言,有可能就把這網站列入黑名單中,所以第一次的印象格外重要,非得不得己的情況,可不能隨意停止正式環境網站。
所以,為了要讓網站持續運作,並且能抓出問題,系統的記錄log就很重要,而記錄的方式也是很講究,如果每個使用者都能做到操作軌跡記錄,我想這個系統的維護性做得相當得體,而這也是log的目標之一。當然,依公司需要,甚至,log記錄還可以做為大數據分析的資產,而不再是只吃資源的負擔。接下來我們就為log的設置提供一些做法:
Step.1 於NuGet安裝log套件
Serilog.Extensions.Logging.File
Step.2 在專案Startup.cs中加入ILogger factory
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) {var path = Directory.GetCurrentDirectory();loggerFactory.AddFile($"{path}\\Logs\\{DateTime.UtcNow.Year}\\{DateTime.UtcNow.Month}\\{DateTime.UtcNow.Day}\\{DateTime.UtcNow.ToString("HHmmss")}_LogFils.txt");
Step.3 在Controller中加入log寫入機制
_logger.LogWarning(001, $"{DateTime.UtcNow.ToLongTimeString()} ::: log info ::: in index.");
Step.4 確認appsettings.json裡的logging設定組態,可依使用者喜好調整
LogLevel
指出記錄檔的嚴重性,範圍從0到6:(嚴重 →輕)
Trace
= 0、 Debug
= 1、 Information
= 2、 Warning
= 3、 Error
= 4、 Critical
= 5 和 None
= 6。
Step.5 (非必要設定)如何選填log的記錄層級
另外,值得一提的是在Action撰寫log記錄時,我們也可以配合記錄層級去選擇你調適的記錄方式,因為不太可能任何時候你都會想看到trace密密麻麻的記錄對吧!例如剛進入首頁、切換頁面…等,這些其實只要infomation記錄一下路徑就好,怎麼選填呢?如下程式所示
方式一:
_logger.Log(LogLevel.Information, MyLogEvents.TestItem, "可以放你要的資訊");
方式二:
_logger.LogInformation(MyLogEvents.TestItem, "可以放你要的資訊");
在Controller中加入log撰寫方式:
MyLogEvents.TestItem
這是事件識別碼。 (可以自設)MyLogEvents
是範例應用程式的一部分,如下所示:
public class MyLogEvents {
public const int GenerateItems = 1000;
public const int ListItems = 1001;
public const int GetItem = 1002;
public const int InsertItem = 1003;
public const int UpdateItem = 1004;
public const int DeleteItem = 1005;
public const int TestItem = 3000;
public const int GetItemNotFound = 4000;
public const int UpdateItemNotFound = 4001;
}
Step.6 啟動專案(F5),並確認log檔案是否產出
以上就是一個比較簡易的log機制產出,其它還有很多log的套件(例如:log4net、NLog…),前二個應該是目前網路上有無數的文章撰寫使用方式,而這次我反而是介紹Serilog,主要原因還是在於非常簡便的設定,就可以提供一般開發人員所需的log功能。(更進階的技巧也許未來有機會可以介紹)
參考出處:
https://docs.microsoft.com/zh-tw/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0