nodejs的module非常多,可用于log的组建也很多,现在介绍一下对log4js的实践。
https://github.com/nomiddlename/log4js-node
假设已经安装了nodejs,express, npm
(1) create a new express project
➜ ~/tmp express -e catchy
create : catchy
create : catchy/package.json
create : catchy/app.js
create : catchy/public
create : catchy/public/images
create : catchy/public/javascripts
create : catchy/routes
create : catchy/routes/index.js
create : catchy/routes/user.js
create : catchy/public/stylesheets
create : catchy/public/stylesheets/style.css
create : catchy/views
create : catchy/views/index.ejs
install dependencies:
$ cd catchy && npm install
run the app:
$ node app
(2) install log4js
catchy npm install log4js -save
catchy npm install
(3) config appender
touch logs/log4js.json
{
"appenders": [
{
"type": "console"
},
{
"type": "file",
"filename": "logs/default.log",
"maxLogSize": 204800,
"backups": 5
},
{
"type": "file",
"filename": "logs/replicator.log",
"category": "replicator",
"maxLogSize": 204800,
"backups": 2
}
]
}
(4) write an utility
catchy touch logUtil.js
/* Logger Utility */
/**
* Logger definition
*/
var log4js = require('log4js');
var levels = ["INFO","DEBUG","ERROR"]
var level = "INFO";
var events = require('events')
var dynamicLogging = new events.EventEmitter()
var u = require("util")
dynamicLogging.setMaxListeners(50)
log4js.configure('logs/log4js.json', { reloadSecs : 180 });
exports.getLogger = function(name) {
var logger = log4js.getLogger(name);
logger.setLevel(level);
dynamicLogging.on("levelChange",function(newLevel){
console.log(u.format("logger %s -- > Level : %s ", name, newLevel))
logger.setLevel(newLevel)
})
return logger;
};
var hasLevel = function(levelName){
var i
for(i=0; i<levels.length;i++){
if (levelName === levels[i]) {
return true
}
}
return false
}
var getLevel = function(){
return level
}
var resetLevel = function(){
dynamicLogging.emit("levelChange", getLevel())
}
var setLevel = function(_level) {
level = _level;
};
exports.log4js = log4js;
exports.setLevel = setLevel
exports.hasLevel = hasLevel
exports.getLevel = getLevel
exports.resetLevel = resetLevel
(5) get logger
var log4js = require("./loggerUtil")
var logger = log4js.getLogger("foo")
var method = "fn"
logger.debug(method,"foo")
logger.info|error
(6) change log level on the fly
var log4js = require("./loggerUtil")
log4js.setLevel("DEBUG"|"INFO"|"ERROR")
log4js.resetLevel()
// then all the logger has changed its level
in loggerUtil.getLogger, an event emitter is created for notify each logger message, once the level has been change, resetLevel will emit an 'levelChange' event for loggers.