cryptonote-universal-pool/lib/logger.js

65 lines
1.7 KiB
JavaScript

var fs = require('fs');
var util = require('util');
var dateFormat = require('dateformat');
var clc = require('cli-color');
var severityMap = {
'info': clc.blue,
'warn': clc.yellow,
'error': clc.red
};
var severityLevels = ['info', 'warn', 'error'];
var logDir = config.logging.files.directory;
if (!fs.existsSync(logDir)){
try {
fs.mkdirSync(logDir);
}
catch(e){
throw e;
}
}
var pendingWrites = {};
setInterval(function(){
for (var fileName in pendingWrites){
var data = pendingWrites[fileName];
fs.appendFile(fileName, data);
delete pendingWrites[fileName];
}
}, config.logging.files.flushInterval * 1000);
global.log = function(severity, system, text, data){
var logConsole = severityLevels.indexOf(severity) >= severityLevels.indexOf(config.logging.console.level);
var logFiles = severityLevels.indexOf(severity) >= severityLevels.indexOf(config.logging.files.level);
if (!logConsole && !logFiles) return;
var time = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss');
var formattedMessage = text;
if (data) {
data.unshift(text);
formattedMessage = util.format.apply(null, data);
}
if (logConsole){
if (config.logging.console.colors)
console.log(severityMap[severity](time) + clc.white.bold(' [' + system + '] ') + formattedMessage);
else
console.log(time + ' [' + system + '] ' + formattedMessage);
}
if (logFiles) {
var fileName = logDir + '/' + system + '_' + severity + '.log';
var fileLine = time + ' ' + formattedMessage + '\n';
pendingWrites[fileName] = (pendingWrites[fileName] || '') + fileLine;
}
};