Log4js原理解析

2021-06-28 06:59:44 字數 3874 閱讀 8125

log4js原理解析

基於log4js 0.6.14版本

log4js總共三篇部落格

《log4js原理解析》

《log4js配置詳解》

《log4js多程序陷阱與避免》

一、概述

網路上有不少關於log4j的原始碼解析文章,但是到目前為止還未見到乙個log4js的原始碼解析,雖然這兩者有其共同之處,但是在實現原理是存在顯著的差別。作為在node.js世界裡最流行的日誌模組,了解其內部設計與實現還是挺有意義的。本篇將描述log4js的架構與實現,先簡要說明log4js中出現的元素,接著為每個元素做詳細說明,最後分析元素的協同工作。

二、設計元素簡述 在

不同的file、datefile、multiprocess、console、clustered

…….var logfile = openthestream(file, logsize, numbackups);

return function(loggingevent) ;}

function configure(config, options)
因此configure返回值是乙個閉包函式,通過該函式可以實現將日誌寫入到檔案之中。

1、file:實現將日誌寫入到文字檔案之中,同時支援日誌檔案按照大小滾動。

2、datefile:實現將日誌寫入到文字檔案之中,日誌按照日期進行滾動。

3、console:實現將日誌寫入到控制台。

配置引數:

配置引數:

5、clustered:用於node的cluster環境之中,實現方式與multiprocess類似,真正的寫日誌是在master中,worker只是將日誌傳送給master。worker和master的配置一樣,內部根據cluster.ismaster可以自動判斷。

配置引數:

四、布局layout

layout

實現每條日誌記錄的格式化,log4js提供了多種的格式化樣式可供選擇,有basiclayout、

messagepassthroughlayout

、patternlayout

、colouredlayout

、coloredlayout

,預設情況下會使用basiclayout。所有的layout都在原始碼的lib/layouts.js中定義。layouts.js檔案除了匯出上述說到的這些layout,還匯出乙個layout函式,定義如下:

layout: function(name, config) 

layoutmakers = ,

"basic": function() ,

"colored": function() ,

"coloured": function() ,

"pattern": function (config)

}

實現將乙個文字描述的layout轉換成內部定義的layout函式。使用起來就像這樣:

layout = layouts.layout(config.layout.type, config.layout);

其中的config.layout.type欄位表示layout的名稱,而config.layout中的其他欄位為對應layout的配置資訊。只有建立pattern型別的layout時才需要其他配置。

下面依次介紹每種layout的功能。

1、basiclayout:最基礎的layout,乙個message通過該basiclayout會變成如下樣子:

[starttime] [loglevel] categoryname - message\n
2、colouredlayout

、coloredlayout

:格式化日誌內容,其中包括了顏色資訊,顏色是根據每條日誌的級別預定義的。每條記錄內容與basiclayout一樣:

[starttime] [loglevel] categoryname - message\n
3、messagepassthroughlayout

:日誌內容只包括訊息,沒有其他字段:

message\n
4、patternlayout

:實現日誌按照配置進行格式化,該layout需要兩個引數,pattern、tokens;其中的pattern表示格式化字串,tokens表示自定義函式。

預定義格式化有:

var replacers = ;
例如,乙個patternlayout的配置如下:

"pattern": "%[%r (%x) %p %c -%] %m%n",

"tokens":  }

其中自定義了

tokens為pid,通過%x來引用。注意pattern的的 %[ 與 %] 表示顏色的開始於結束。上述配置列印出來的日誌如下:

五、logger物件

logger

物件實現對日誌level的管理,並定義了對外的寫日誌介面。客戶端通過log4js.getlogger()獲取的就是該logger物件。logger類從

events.eventemitter

logger物件的組成:

六、log4js

1、日誌管理

log4js

圖 2、log事件

前面已經說明,呼叫

圖2:logger的事件監聽機制;使用者在呼叫

logger.info(

『hello');

3、替換console

在開發的過程中,為了方便可能直接將日誌直接以

console.log方式列印出來,使用log4js可以將console的日誌重定向到日誌檔案中。log4js匯出了兩個函式:

4、日誌配置定期檢查更新

log4js

log4js.configure('file.json', );
5、其他匯出函式說明

log4js總共三篇部落格

《log4js原理解析》

《log4js配置詳解》

《log4js多程序陷阱與避免》

log4js的配置難點解析

log4js整體配置相對比較簡單,但部分配置容易混淆,網上的說法也不經相同,以下根據自己實踐與理解記錄一下。1 type console 將日誌輸出至控制台,這樣可以方便開發人員在開發時接看到所有日誌資訊,在其他環境不建議設定 2 alwaysincludepattern 如果為true,則每個檔案...

日誌管理 log4js

版本 安裝 npm install log4js封裝 log4js 在專案根目錄下新建檔案logger.js var log4js require log4js log4js.configure replaceconsole true 替換 console.log levels exports.lo...

node 日誌管理log4js

我們使用express框架時,開發模式用node或者supervisor啟動nodejs應用時,控制台都是顯示如下的日誌。get css bootstrap.min.css 3041ms get css my.css 3040ms get js bootstrap.min.js 3044ms get...