ethstats-server/lib/utils/logger.js
2015-12-04 19:42:28 +00:00

166 lines
3.0 KiB
JavaScript

'use strict';
var util = require('util');
var chalk = require('chalk');
var sections = [
'API',
'COL',
'SYS'
];
var types = [
'CON',
'CHR',
'UPD',
'BLK',
'TXS',
'STA',
'HIS',
'PIN'
];
var typeColors = {
'CON': chalk.reset.bold.yellow,
'CHR': chalk.reset.bold.red,
'UPD': chalk.reset.bold.green,
'BLK': chalk.reset.bold.blue,
'TXS': chalk.reset.bold.cyan,
'STA': chalk.reset.bold.red,
'HIS': chalk.reset.bold.magenta,
'PIN': chalk.reset.bold.yellow,
};
var verbosity = [
[],
['error'],
['error', 'warn', 'success'],
['info', 'error', 'warn', 'success', 'time', 'timeEnd']
];
var ENV_VERBOSITY = process.env.VERBOSITY || 2;
[
{
name: "info",
sign: '=i=',
signColor: chalk.blue,
messageColor: chalk.bold,
formatter: function (sign, message)
{
return [sign, message];
}
},
{
name: "success",
inherit: 'log',
sign: '=✓=',
signColor: chalk.green,
messageColor: chalk.bold.green,
formatter: function (sign, message)
{
return [sign, message];
}
},
{
name: "warn",
sign: '=!=',
signColor: chalk.yellow,
messageColor: chalk.bold.yellow,
formatter: function (sign, message)
{
return [sign, message];
}
},
{
name: "error",
sign: '=✘=',
signColor: chalk.red,
messageColor: chalk.bold.red,
formatter: function (sign, message)
{
return [sign, message];
}
},
{
name: "time",
sign: '=T=',
signColor: chalk.cyan,
messageColor: chalk.bold,
formatter: function (sign, message)
{
return [util.format.apply(util, [sign, message])];
}
},
{
name: "timeEnd",
sign: '=T=',
signColor: chalk.cyan,
messageColor: chalk.bold,
formatter: function (sign, message)
{
return [util.format.apply(util, [sign, message])];
}
}
].forEach( function (item)
{
if(item.inherit !== undefined)
console[item.name] = console[item.inherit];
var fn = console[item.name];
console[item.name] = function ()
{
if(verbosity[ENV_VERBOSITY].indexOf(item.name) === -1)
return false;
var args = Array.prototype.slice.call(arguments);
var type = null,
sign,
time;
var section = 'API';
var message = '';
if (args[0].indexOf(new Date().getFullYear()) >= 0)
{
time = args.splice(0, 1);
}
if (sections.indexOf(args[0]) >= 0)
{
section = args.splice(0, 1);
}
if (types.indexOf(args[0]) >= 0)
{
type = args.splice(0, 1);
}
sign = item.signColor.bold( '[' ) + chalk.reset.bold.white( section ) + item.signColor.bold( ']' );
if(type !== null)
sign = sign + " " + item.signColor.bold( '[' ) + typeColors[type](type) + item.signColor.bold( ']' );
if(item.name !== "time" && item.name !== "timeEnd")
{
time = (new Date()).toJSON().replace("T", " ").replace("Z", " ");
}
else
{
time = time.toString().replace("T", " ").replace("Z", "");
}
sign = chalk.reset.magenta(time) + sign;
if (typeof args[0] === 'object')
{
message = util.inspect( args[0], { depth: null, colors: true } );
}
else {
message = item.messageColor( util.format.apply(util, args) );
}
return fn.apply( this, item.formatter(sign, message) );
}
});