在 nodeJS 開發中,不能直接使用 console.log 打印相關日誌並 debug。所以,查閱資料後,可以使用 log4js 在終端打印日誌。下面是具體的安裝和使用。
除了直接打印日誌,這個庫還支持這些功能:支持使用不同顏色標記和打印日誌;文件類型的日誌輸出源,並可通過配置支持基於文件大小或日期進行日誌回滾;支持日誌分級和日誌分類;可配置的日誌信息模式。
基本用法
'use strict';
let log4js = require('log4js');
let logger = log4js.getLogger();
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
運行
node log.js
注意:如果沒有全局安裝 log4js 會報錯,然後執行
sudo npm install log4js -g
# 使用npm install -g 'xxx' 之後仍然報
# Cannot find module 'xxx' 錯誤,可以通過設置環境變量來解決;
export NODE_PATH=/usr/local/lib/node_modules/
echo $NODE_PATH
# 運行就可以正常執行
# https://blog.csdn.net/wmsjlihuan/article/details/19816389
發現沒有,什麼輸出也沒有?爲什麼呢?
因爲log4js的缺省級別是off,也就是所有的都不會輸出。
指定輸出級別
'use strict';
let log4js = require('log4js');
let logger = log4js.getLogger();
logger.level = 'info';
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
再運行:
node log.js
[2019-05-24T07:04:36.167] [INFO] default - this is info
[2019-05-24T07:04:36.169] [WARN] default - this is warn
# 控制檯會顯示 info warn 信息,但是 debug 信息不顯示
這樣info以及以上級別的log都能夠正常輸出了。
如果需要輸出全部信息,把 logger.level = ‘debug’ 即可。下面是全部的等級。
ALL
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
MARK
OFF
設置全局級別
前面例子設置了單個logger的輸出級別,現在設置所有logger的缺省級別。
創建 log 配置文件 logconf.json (日誌類型,日誌級別,輸出源)
{
"appenders": {
"consoleout": { "type": "console" }
},
"categories": {
"default": { "appenders": [ "consoleout" ], "level": "debug" }
}
}
全局加載配置
'use strict';
let config = require('./logconf.json');
let log4js = require('log4js');
log4js.configure(config);
let logger = log4js.getLogger();
logger.debug('this is debug');
logger.info('this is info');
logger.warn('this is warn');
運行
node log.js
[2019-05-24T07:10:10.557] [DEBUG] default - this is debug
[2019-05-24T07:10:10.560] [INFO] default - this is info
[2019-05-24T07:10:10.560] [WARN] default - this is warn
因爲在配置文件裏把level設置成了debug,這樣三個log行都打出來了。
目前支持的日誌
SMTP:以郵件形式發送日誌;
GELF ( Graylog Extended Log Format,graylog擴展日誌格式),能夠規避傳統的系統級日誌的未壓縮、1024字節長度限制、無數據類型等缺點;它只依賴於node的udp模塊支持,可以通過udp協議發送日誌到兼容gelf的服務器;
File 將日誌輸出到指定文件;
console 將日誌打印到控制檯;
redis 將日誌事件存儲到redis數據庫;
綜合使用
let log4js = require('log4js');
log4js.configure({
appenders: {test: {
type: 'console',
}},
categories: { default: { appenders: ['test'], level: 'error' } }
});
let logger = log4js.getLogger('test');
logger.level = 'warn';
logger.debug('debug...');
logger.info('info...');
logger.warn('warn...');
logger.error('error...');
console.log('start...');
參考文獻
官網上說的很詳細
https://www.npmjs.com/package/log4js
https://github.com/log4js-node/log4js-node