Connect
compile()
Compile fmt into a function.
Source
function compile(fmt) {
fmt = fmt.replace(/"/g, '\\"');
var js = ' return "' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function(_, name, arg){
return '"\n + (tokens["' + name + '"](req, res, "' + arg + '") || "-") + "';
}) + '";'
return new Function('tokens, req, res', js);
};exports.token()
Define a token function with the given name,
and callback fn(req, res).
Source
exports.token = function(name, fn) {
exports[name] = fn;
return this;
};exports.format()
Define a fmt with the given name.
Source
exports.format = function(name, str){
exports[name] = str;
return this;
};Default format.
Source
exports.format('default', ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"');Short format.
Source
exports.format('short', ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms');Tiny format.
Source
exports.format('tiny', ':method :url :status :res[content-length] - :response-time ms');dev (colored)
Source
exports.format('dev', function(tokens, req, res){
var status = res.statusCode
, len = parseInt(res.getHeader('Content-Length'), 10)
, color = 32;
if (status >= 500) color = 31
else if (status >= 400) color = 33
else if (status >= 300) color = 36;
len = isNaN(len)
? ''
: len = ' - ' + bytes(len);
return '\033[90m' + req.method
+ ' ' + req.originalUrl + ' '
+ '\033[' + color + 'm' + res.statusCode
+ ' \033[90m'
+ (new Date - req._startTime)
+ 'ms' + len
+ '\033[0m';
});request url
Source
exports.token('url', function(req){
return req.originalUrl || req.url;
});request method
Source
exports.token('method', function(req){
return req.method;
});response time in milliseconds
Source
exports.token('response-time', function(req){
return new Date - req._startTime;
});UTC date
Source
exports.token('date', function(){
return new Date().toUTCString();
});response status code
Source
exports.token('status', function(req, res){
return res.statusCode;
});normalized referrer
Source
exports.token('referrer', function(req){
return req.headers['referer'] || req.headers['referrer'];
});remote address
Source
exports.token('remote-addr', function(req){
return req.socket && (req.socket.remoteAddress || (req.socket.socket && req.socket.socket.remoteAddress));
});HTTP version
Source
exports.token('http-version', function(req){
return req.httpVersionMajor + '.' + req.httpVersionMinor;
});UA string
Source
exports.token('user-agent', function(req){
return req.headers['user-agent'];
});request header
Source
exports.token('req', function(req, res, field){
return req.headers[field.toLowerCase()];
});response header
Source
exports.token('res', function(req, res, field){
return (res._headers || {})[field.toLowerCase()];
});
Logger
Log requests with the given
optionsor aformatstring.Options
formatFormat string, see below for tokensstreamOutput stream, defaults to stdoutbufferBuffer duration, defaults to 1000ms when trueimmediateWrite log line on request instead of response (for response times)Tokens
:req[header]ex::req[Accept]:res[header]ex::res[Content-Length]:http-version:response-time:remote-addr:date:method:url:referrer:user-agent:statusFormats
Pre-defined formats that ship with connect:
default':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'short':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms'tiny':method :url :status :res[content-length] - :response-time ms'devconcise output colored by response status for development useExamples
Defining Tokens
To define a token, simply invoke
connect.logger.token()with thename and a callback function. The value returned is then available
as ":type" in this case.
Defining Formats
All default formats are defined this way, however it's public API as well:
Source