前言
Apache 提供的開源log框架 log4xx 系列,想必是滿容易見到的
而log4js則是Node.Js版本的log框架
npm上現成的套件@quickts/nestjs-log4js
若只是單純把所有log寫檔,並14天自動清除的話
推薦直接使用@quickts/nestjs-log4js
此套件引入後,預設就有已經寫好的基本設定了
只需要簡單使用的話,單純引入後就可以使用了
若想看預設的設定,可以再此處查看
隨著系統的架構越擴越大,功能越來越複雜,log就會面臨特殊業務因較複雜,要單獨寫入一個log檔便於追查問題、各登入user有自己的獨立log檔
於app.module
傳入自己的設定,覆蓋掉套件的預設設定檔就可以了
log4js 基本核心概念說明
log4js分下列3個核心類別
其層級關係為:category > appender > layout
log4js instance可以有多個category;一個category可以有多個appender;一個appender可以有多個layout
category
(存儲器):log主項目,log4js.getLogger()
直接取得的項目appender
(存哪裡):log的輸出方式,如console、檔案、smtp、tcp…等layout
(如何存):log檔案存放路徑、命名、保留天數…等
較完整使用方式可以參照參考資料的連結
範例
若要覆寫@quickts/nestjs-log4js
的預設設定,而他預設設定本身就是符合自己需求的話
要記得拷貝他的設定檔,再額外增加自己的部份
從原始碼可以知道他是以傳入的為主,不會跟預設的範例組合在一起!
針對上述提到的二個情境,應該也是大家較容易碰到的,提供範例程式,再自行修改
特殊業務因較複雜,要單獨寫入一個log檔便於追查問題
某些業務有其複雜性,混在all裡面追查造成追查困難的話,將其操作獨立成一份檔案,是最方便的作法了!
或著訂單因有其重要性,每一筆的增減除了all裡面,也要單獨拉一檔案單純記錄「是誰操作了增減」
便於快速查看,而不必大海撈針
1 | Log4jsModule.forRoot({ |
如果希望有個all來記錄所有log資訊的話,記得在default
裡也加入ordersLogger
若沒有的話,則不必
在需要將內容單獨記錄在log檔裡的,第2個參數傳入orders
就可以了
1 | this.logger.log('要寫入的訊息', 'orders'); |
若整個service所有log都要寫進獨立檔案,不想要每行都傳參數
則在最上面new Logger('orders')
直接入參services
內使用時就不需要逐一傳參了!
1 | +import { Injectable, Logger } from '@nestjs/common'; |
各登入user有自己的獨立log檔
若是有權限控管的系統,各USER有自己的LOG檔,就相當重要了
使用log4js本身提供的multiFile
參數
1 | Log4jsModule.forRoot({ |
這種屬於全面性的LOG,建議使用Interceptor來寫入
1 | () |
完整設定資料
在main.ts
裡,將log預設使用log4js
1 | + import { Log4jsService } from '@quickts/nestjs-log4js'; |
1 | Log4jsModule.forRoot({ |