Serilog Essential Furthermore

前言 三年前寫了一篇跟 Serilog 有關的極致入門文章後就把這個主題閒置到現在,他的很多特色不要說點到為止,而是根本沒提到,但這樣對於這樣一個好用的 Library 來說實在太糟蹋,所以打算重啟這個主題。因為當時就有位這個主題開個 repo 所以我們也就不要浪費網路的空間了,直接回收利用吧(還順便把 solution 檔給升級了)~ source code 這次將會針對設定做一點初步的介紹,雖然近期事情開始漸漸變多,但看看能抽出多少時間來把相關的內容介紹一下,也許有機會變成一個小的系列 (也許啦 XD)。 內文 這邊會展示在進行 Serilog 設置時可以採行什麼樣的寫法在 Production 環境下可以有比較好的閱讀性與維護性,還有我們可以針對需要寫 Log 的情境給予一些過濾條件,讓這個系統更有彈性,最後我們整合目前官方網站上有提供的一些 Sink 來稍稍展示 Serilog 搭配上 Sink 之後可以展現的可能性。 在先前的文章之中我們直接針對 Serilog 的 LoggerConfiguration 類別來設定,但若是需要設定的條件眾多那麼光是這個設定就會讓程式看起來很複雜。這邊會使用一個小技巧來讓設定看起來比較簡潔一點。 首先建立一個給 Serilog 做初始的一個類別,並使用最簡單的設定方式來為 Logger 做設定。 ps. 這邊的 LogFactory 類別只是作範例簡單使用,重點在於 InitMyLogger 方法內的寫法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class LogFactory { public static void InitMyLogger() { Log.Logger = new LoggerConfiguration() .WriteTo.NLog( Serilog.Events.LogEventLevel.Error, "[AppId:{AppId}]{Message:lj}{NewLine}{Exception}") .WriteTo.Console( restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Information, outputTemplate: "{Timestamp:HH:mm:ss} [AppId:{AppId} {Level:u3}] {Message:lj}{NewLine}{Exception}") .WriteTo.Logger(configer => { configer.Filter .ByIncludingOnly(Matching.FromSource<BusinessLogic>()) .WriteTo.Console( Serilog.Events.LogEventLevel.Warning, "{Timestamp:HH:mm:ss} [AppId:{AppId2}{AppId} {Level:u3}]$ {Message:lj}{NewLine}{Exception}"); }).CreateLogger(); } } 這邊不難看出目前雖然只是簡單的三樣設定就已將讓這個設定開始顯得有些複雜了。若這是一段需要被維護的程式碼不難想像應該會是個痛苦的開始。 ...

March 31, 2020 · 4 分鐘 · 842 字

Serilog Rookie's Note

前言 Serilog 是一款給 .NET 平台的 Log Library ,它最大的特色應該是使用事件來驅動,而不是單純的寫下 Log ,這點讓它跟其他的 Library 有很大的不同,而他所提供的多樣Sink讓這點的發揮更加強大。他可以做到同時記下 Log ,發送信件,存到DB並且傳到 Slack 中通知維運人員,這些事情都可以在記下 Log 時一併做完,只需要設定一次。這點是我覺得這個 Library 最強大的地方。 source code 內文 Serilog 除了可以在 .NET 平台使用外,他還支援了 .NET Core ,這讓它在非 Windows 平台上的使用是可能的, Source Code 跟以下的文章就是在MAC環境下搭配 .NET Core 使用 Serilog。 開啟一個新的專案後在 Dependencies 按下右鍵選擇 Add Packages,再使用關鍵字「Serilog」查詢~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 /// <summary> /// My logger. /// </summary> public class MyLogger { /// <summary> /// The logger. /// </summary> private ILogger _logger; /// <summary> /// Initializes a new instance of the <see cref="T:BenSerilogNlog.MyLogger"/> class. /// </summary> public MyLogger() { ////最基本的建立Logger的方式 this._logger = new LoggerConfiguration() .WriteTo.Console() .CreateLogger(); } /// <summary> /// Logs the info. /// </summary> /// <param name="message">Message.</param> public void LogInfo(string message){ this._logger.Information(message); } } 呼叫端可以這樣使用 ...

November 27, 2017 · 1 分鐘 · 189 字