2026年4月21日 星期二

自訂 NLog Target

有時候我們已經有自己的 Log Server 或是希望將Log 拋向第三方服務,比方說 Slack 或是 telegram,

這時就需要自己擴充



由於我們希望透過統一的操作方式來將Log 訊息儲存到多個目的,故需要客製化一個 Target


首先我們先安裝必要的套件(這邊先使用Console 示範)


我們加入nlog.config 檔案,並且設定「永遠複製」

其中,我們加入一個 type 為 LogServer 的標籤,名稱命名為 logapi


接著我們來實作自訂的 LogTarget

其中 [Target(“LogServer”)] 代表我們自訂的 Type,類別繼承AsyncTaskTarget,

相關的 Url 與Token 代表LogServer 的位置與有效簽章

LogAPITarget.cs


建立好 Target Type 後,就要建立一至性的Logger,前面有提到我希望保持原生操作 logger 的方式

來操作寫入的動作,故需要實作 ILogger(LogServerLogger.cs)



最後我的透過 LogServerFactory 來管理NLog 的生命週期,並且提供請求建立ILogger


實際使用時可以如下(Program.cs)


Console 的輸出


檔案的輸出


LogServer 的紀錄


接著我們透過 ASP.NET WebApi 來使用NLog

專案引用套件如下


Program.cs


Controller


此時,我們發現注入的是 LogServerFactory ,進入後都要透過 factory.create 來建立 ILogger,顯得不太方便;

有沒有相關方法來直接注入ILogger


以下透過AI 來改寫


nlog.config


LogServerLoggerProvider.cs

Program.cs



參考


沒有留言:

張貼留言