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函式。使用起來就像這樣:
layout = layouts.layout(config.layout.type, config.layout);
其中的config.layout.type欄位表示layout的名稱,而config.layout中的其他欄位為對應layout的配置資訊。只有建立pattern型別的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...