Skip to content

Instantly share code, notes, and snippets.

@lovio
Created March 6, 2015 09:09
Show Gist options
  • Save lovio/b5600540f977f7505fb4 to your computer and use it in GitHub Desktop.
Save lovio/b5600540f977f7505fb4 to your computer and use it in GitHub Desktop.
log4js log access to logstash
var logger = log4js.getLogger('access');
app.use(function (req, res, next) {
// 无法直接得到response.data信息
res._json = res.json;
res.json = function(data){
res.responseData = data;
res._json(data);
};
var start = new Date()
, statusCode
, writeHead = res.writeHead
, url = req.originalUrl;
res.writeHead = function(code, headers){
res.writeHead = writeHead;
res.writeHead(code, headers);
res.__statusCode = statusCode = code;
res.__headers = headers || {};
};
res.on('finish', function() {
res.responseTime = new Date() - start;
var log = {
host: require('os').hostname(),
category: 'access',
method: req.method,
url: req.originalUrl,
responseTime: res.responseTime + ' ms',
status: res.__statusCode || res.statusCode,
remoteAddress: req.ip || req._remoteAddress || ( req.socket && (req.socket.remoteAddress || (req.socket.socket && req.socket.socket.remoteAddress))) || 'unknown',
body: req.body || {},
ua: req.headers["user-agent"] || '',
webappVersion: req.headers["X-Webapp-Version"] || '',
referrer: req.headers.referer || req.headers.referrer || '',
apiVersion: req.headers["accept-version"] || 'v1',
}
if(res.statusCode >= 400){
log.responseData = res.responseData;
}
logger.info(JSON.stringify(log));
});
next();
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment