github.com/cloudcredo/cloudrocker@v0.0.0-20160108110610-1320f8cc2dfd/sample-apps/node/node_modules/logfmt/lib/request_logger.js (about) 1 var commonFormatter = function(req, res){ 2 if((typeof req.path) == 'function'){ 3 //in restify path is a function 4 var path = req.path(); 5 } 6 else{ 7 //in express it is an attribute 8 var path = req.originalUrl || req.path || req.url; 9 } 10 11 var httpHeader = req.header && req.header('x-forwarded-for') 12 var requestID = req.header && req.header('x-request-id') 13 14 var ip = req.ip || httpHeader 15 || req.connection.remoteAddress; 16 17 var requestData = { 18 ip: ip, 19 time: (new Date()).toISOString(), 20 method: req.method, 21 path: path, 22 "status": res.statusCode, 23 } 24 25 if (requestID) { 26 requestData.request_id = requestID; 27 } 28 29 if(res.get){ 30 requestData.content_length = res.get('content-length'); 31 requestData.content_type = res.get('content-type'); 32 } 33 return requestData; 34 } 35 36 var immediateLogger = function(logger, options, formatter){ 37 return function(req, res, next){ 38 var data = formatter(req, res); 39 logger.log(data); 40 next(); 41 } 42 } 43 44 var timingLogger = function(logger, options, formatter){ 45 return function(req, res, next){ 46 var elapsed = options.elapsed || 'elapsed'; 47 var timer = logger.time(elapsed); 48 var end = res.end; 49 res.end = function(chunk, encoding) { 50 var data = formatter(req, res); 51 res.end = end; 52 res.end(chunk, encoding); 53 timer.log(data); 54 }; 55 next(); 56 } 57 } 58 59 exports.init = function(logger, options, formatter) { 60 this.logger = logger; 61 62 if(!formatter && !options){ 63 formatter = commonFormatter; 64 options = {}; 65 } 66 else if(!formatter){ 67 if(typeof options == 'function'){ 68 formatter = options; 69 options = {}; 70 }else{ 71 formatter = commonFormatter; 72 } 73 } 74 options = options || {}; 75 76 if(options.immediate){ 77 return immediateLogger(logger, options, formatter); 78 }else{ 79 return timingLogger(logger, options, formatter); 80 } 81 } 82 83 exports.commonFormatter = commonFormatter;