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(); } } 這邊不難看出目前雖然只是簡單的三樣設定就已將讓這個設定開始顯得有些複雜了。若這是一段需要被維護的程式碼不難想像應該會是個痛苦的開始。 ...