Added automatic level detection to connect-logger, depends on http status response.
Update of connect logger example code, compatible with express 3.x
This commit is contained in:
parent
ad8229145e
commit
ac6284add1
@ -1,14 +1,46 @@
|
|||||||
var log4js = require('./lib/log4js');
|
//The connect/express logger was added to log4js by danbell. This allows connect/express servers to log using log4js.
|
||||||
log4js.addAppender(log4js.fileAppender('cheese.log'), 'cheese');
|
//https://github.com/nomiddlename/log4js-node/wiki/Connect-Logger
|
||||||
|
|
||||||
var logger = log4js.getLogger('cheese');
|
// load modules
|
||||||
logger.setLevel('INFO');
|
var log4js = require('log4js');
|
||||||
|
var express = require("express");
|
||||||
|
var app = express();
|
||||||
|
|
||||||
var app = require('express').createServer();
|
//config
|
||||||
|
log4js.configure({
|
||||||
|
appenders: [
|
||||||
|
{ type: 'console' },
|
||||||
|
{ type: 'file', filename: 'logs/log4jsconnect.log', category: 'log4jslog' }
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
//define logger
|
||||||
|
var logger = log4js.getLogger('log4jslog');
|
||||||
|
|
||||||
|
// set at which time msg is logged print like: only on error & above
|
||||||
|
// logger.setLevel('ERROR');
|
||||||
|
|
||||||
|
//express app
|
||||||
app.configure(function() {
|
app.configure(function() {
|
||||||
app.use(log4js.connectLogger(logger, { level: log4js.levels.INFO }));
|
app.use(express.favicon(''));
|
||||||
|
// app.use(log4js.connectLogger(logger, { level: log4js.levels.INFO }));
|
||||||
|
// app.use(log4js.connectLogger(logger, { level: 'auto', format: ':method :url :status' }));
|
||||||
|
|
||||||
|
//### AUTO LEVEL DETECTION
|
||||||
|
//http responses 3xx, level = WARN
|
||||||
|
//http responses 4xx & 5xx, level = ERROR
|
||||||
|
//else.level = INFO
|
||||||
|
app.use(log4js.connectLogger(logger, { level: 'auto' }));
|
||||||
});
|
});
|
||||||
app.get('*', function(req,res) {
|
|
||||||
res.send('hello world\n <a href="/cheese">cheese</a>\n');
|
//route
|
||||||
|
app.get('/', function(req,res) {
|
||||||
|
res.send('hello world');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
//start app
|
||||||
app.listen(5000);
|
app.listen(5000);
|
||||||
|
|
||||||
|
console.log('server runing at localhost:5000');
|
||||||
|
console.log('Simulation of normal response: goto localhost:5000');
|
||||||
|
console.log('Simulation of error response: goto localhost:5000/xxx');
|
||||||
|
@ -5,7 +5,7 @@ var levels = require("./levels");
|
|||||||
* Options:
|
* Options:
|
||||||
*
|
*
|
||||||
* - `format` Format string, see below for tokens
|
* - `format` Format string, see below for tokens
|
||||||
* - `level` A log4js levels instance.
|
* - `level` A log4js levels instance. Supports also 'auto'
|
||||||
*
|
*
|
||||||
* Tokens:
|
* Tokens:
|
||||||
*
|
*
|
||||||
@ -47,8 +47,7 @@ function getLogger(logger4js, options) {
|
|||||||
|
|
||||||
// nologs
|
// nologs
|
||||||
if (nolog && nolog.test(req.originalUrl)) return next();
|
if (nolog && nolog.test(req.originalUrl)) return next();
|
||||||
|
if (thislogger.isLevelEnabled(level) || options.level === 'auto') {
|
||||||
if (thislogger.isLevelEnabled(level)) {
|
|
||||||
|
|
||||||
var start = +new Date
|
var start = +new Date
|
||||||
, statusCode
|
, statusCode
|
||||||
@ -65,6 +64,15 @@ function getLogger(logger4js, options) {
|
|||||||
res.writeHead(code, headers);
|
res.writeHead(code, headers);
|
||||||
res.__statusCode = statusCode = code;
|
res.__statusCode = statusCode = code;
|
||||||
res.__headers = headers || {};
|
res.__headers = headers || {};
|
||||||
|
|
||||||
|
//status code response level handling
|
||||||
|
if(options.level === 'auto'){
|
||||||
|
level = levels.INFO;
|
||||||
|
if(code >= 300) level = levels.WARN;
|
||||||
|
if(code >= 400) level = levels.ERROR;
|
||||||
|
} else {
|
||||||
|
level = levels.toLevel(options.level, levels.INFO)
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// proxy end to output a line to the provided logger.
|
// proxy end to output a line to the provided logger.
|
||||||
@ -72,12 +80,14 @@ function getLogger(logger4js, options) {
|
|||||||
res.end = end;
|
res.end = end;
|
||||||
res.end(chunk, encoding);
|
res.end(chunk, encoding);
|
||||||
res.responseTime = +new Date - start;
|
res.responseTime = +new Date - start;
|
||||||
if ('function' == typeof fmt) {
|
if (thislogger.isLevelEnabled(level)) {
|
||||||
|
if (typeof fmt === 'function') {
|
||||||
var line = fmt(req, res, function(str){ return format(str, req, res); });
|
var line = fmt(req, res, function(str){ return format(str, req, res); });
|
||||||
if (line) thislogger.log(level, line);
|
if (line) thislogger.log(level, line);
|
||||||
} else {
|
} else {
|
||||||
thislogger.log(level, format(fmt, req, res));
|
thislogger.log(level, format(fmt, req, res));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user