NodeJS web 实践 - logging

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.
发布了386 篇原创文章 · 获赞 19 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/watson243671/article/details/19675709