livereloadx
Version:
An implementation of the LiveReload 2 server in Node.js
89 lines (73 loc) • 2.36 kB
JavaScript
;
var util = require('util');
// Logger constructor
function Logger(transport) {
this.transport = transport;
}
// Core logging method
Logger.prototype.log = function(level, args) {
this.transport.apply(this.transport, arguments);
};
// Define prototype methods for each log level
// e.g. logger.log('info', msg) <=> logger.info(msg)
['error', 'warn', 'info', 'debug', 'trace'].forEach(function(level) {
Logger.prototype[level] = function(args) {
args = Array.prototype.slice.call(arguments);
args.unshift(level);
this.log.apply(this, args);
};
});
// winston compatible transport
function createConsoleTransport(name) {
var esc = String.fromCharCode(0x1b);
var levelMap = {
'error': esc + '[31merror' + esc + '[39m: ', // red
'warn': esc + '[33mwarn' + esc + '[39m: ', // yellow
'info': esc + '[32minfo' + esc + '[39m: ', // green
'debug': esc + '[34mdebug' + esc + '[39m: ', // white
'trace': esc + '[36mtrace' + esc + '[39m: ' // blue
};
function getNowString() {
function pad2(n) {
return n < 10 ? "0" + n : n.toString();
}
var d = new Date();
return util.format('%s-%s-%s %s:%s:%s',
d.getFullYear(), pad2(d.getMonth() + 1), pad2(d.getDate()),
pad2(d.getHours()), pad2(d.getMinutes()), pad2(d.getSeconds()));
}
return function() {
var args = Array.prototype.slice.call(arguments);
// level filter
var level = args.shift();
if (level === 'trace') {
return;
}
if (!module.exports.verbose && level === 'debug') {
return;
}
// add time and colorize level
args[0] = (getNowString()) + ' - ' + levelMap[level] + args[0];
console.log.apply(console, args);
};
}
// debug.js transport
function createDebugTransport(name) {
var debug = require('debug')('livereloadx:' + name);
return function(level, args) {
args = Array.prototype.slice.call(arguments);
args.shift();
debug.apply(debug, args);
};
}
// debug compatible interface
module.exports = function(name) {
var transport = null;
if (module.exports.cli) {
transport = createConsoleTransport(name);
} else {
transport = createDebugTransport(name);
}
return new Logger(transport);
};
module.exports.cli = false;