UNPKG

connect-ltsv-logger

Version:

ltsv formated access logger for connect based application

175 lines (150 loc) 3.89 kB
var url = require("url"), fs = require("fs"), util = require("util"), logger = require("connect").logger, moment = require("moment"); var ltsvTokens = [ "time", "host", "X-Forwarded-For", "user", "ident", "req", "method", "uri", "protocol", "status", "size", "reqsize", "referer", "ua", "vhost", "reqtime", "X-Cache", "X-Runtime" ]; logger.token("time",function(){ return "[" + moment().format("DD/MMM/YYYY:HH:mm:ss Z") + "]" ; }); logger.token("host",function(req,res){ return req.connection.address().address || '-'; }); logger.token("X-Forwarded-For",function(req,res){ return res.getHeader("X-Forwarded-For") || "-"; }); logger.token("user",function(req,res){ return '-'; }); logger.token("ident",function(req,res){ return '-'; }); logger.token("req",function(req,res){ var ret = []; ret.push(req.method); ret.push(req.url); ret.push("HTTP/"+req.httpVersion); return ret.join(" "); }); logger.token("method",function(req,res){ return req.method; }); logger.token("uri",function(req,res){ return url.parse(req.url).href; }); logger.token("protocol",function(req,res){ return url.parse(req.url).protocol; }); logger.token("status",function(req,res){ return res.statusCode; }); logger.token("size",function(req,res){ return res.getHeader("content-length"); }); logger.token("reqsize",function(req,res){ if(req.body) return req.body.length; return "-"; }); logger.token("referer",function(req,res){ return req.headers['referer'] || req.headers['referrer']; }); logger.token("ua",function(req,res){ return req.headers['user-agent']; }); logger.token("vhost",function(req,res){ return req.headers["host"]; }); logger.token("reqtime",function(req,res){ return new Date - req._startTime;; }); logger.token("X-Cache",function(req,res){ return res.getHeader('X-Cache'); }); logger.token("X-Runtime",function(req,res){ return res.getHeader('X-Runtime'); }); //override connect.logger's format as ltsv /** * Default format. */ var defaultFmt = []; defaultFmt.push("host::remote-addr"); defaultFmt.push("ident:-"); defaultFmt.push("user:-"); defaultFmt.push("time:[:date]"); defaultFmt.push("req::method :url HTTP/:http-version"); defaultFmt.push("status::status"); defaultFmt.push("size::res[content-length]"); defaultFmt.push("referer::referrer"); defaultFmt.push("ua::user-agent"); logger.format('default',defaultFmt.join("\t")); /** * Short format. */ var shortFmt = []; shortFmt.push("host::remote-addr"); shortFmt.push("ident:-"); shortFmt.push("req::method :url HTTP/:http-version"); shortFmt.push("status::status"); shortFmt.push("size::res[content-length]"); shortFmt.push("response-time::response-time ms"); logger.format('short',shortFmt.join("\t")); /** * Tiny format. */ var tinyFmt = []; tinyFmt.push("req::method :url"); tinyFmt.push("status::status"); tinyFmt.push("size::res[content-length]"); tinyFmt.push("response-time::response-time ms"); logger.format('tiny',tinyFmt.join("\t")); function setFormat(arr){ var i,len,fmt = []; for(i = 0,len = arr.length;i < len;i++){ if (ltsvTokens.indexOf (arr[i])>=0){ fmt.push(arr[i] + "::" +arr[i]); } } logger.format("ltsv",fmt.join("\t")); } exports = module.exports = function ltsvLogger(options){ var toString = Object.prototype.toString; var typeOf = function(that){ var t = toString.call(that); return t.split(" ")[1].replace("]",""); }; if (typeOf(options) === "Object") { options = options; if (typeOf(options.format) === "Array") { setFormat(options.format); options.format = "ltsv"; } } else if (typeOf(options) === "Array") { setFormat(options); options.format = "ltsv"; } else if (typeOf(options) === "String") { options = { format: options }; } else { options = {}; } return logger(options); };