jbs-simple-console-logger
Version:
A simplistic logger class for writing easy to read console.logs
127 lines (110 loc) • 3.07 kB
JavaScript
/**
* @Author: Matthew Auld
* @Date: July 23rd, 2017 - 2:54:25 PM
* @Email: matthew@jumpbuttonstudio.com
* @Project: OBND Master Server
* @Filename: logger.js
* @Last modified by: Matthew Auld
* @Last modified time: August 6th, 2017 - 1:46:10 PM
* @Copyright: 2017 JumpButton Studio
*/
function Logger(mode) {
this.startTime = new Date().getTime();
this.mode = mode;
}
Logger.modes = {
TRACE: 4,
DEBUG: 3,
INFO: 2,
WARN: 1,
ERROR: 0
};
Logger.mode_str = ["ERROR", "WARNING", "INFO", "DEBUG", "TRACE"];
Logger.colors = ["\x1b[31m", "\x1b[33m", "\x1b[37m", "\x1b[32m", "\x1b[36m"];
Logger.reset = "\x1b[0m";
Logger.prototype.log = function(type, name, message) {
var str = "";
var dt = this.diff(this.startTime, new Date().getTime());
str += (dt.weeks > 0 ? dt.weeks : "") + (dt.days > 0 ? dt.days + ":" : "") + (dt.hours <= 9 ? "0" + dt.hours : dt.hours) + ":" + (dt.minutes <= 9 ? "0" + dt.minutes : dt.minutes) + ":" + (dt.seconds <= 9 ? "0" + dt.seconds : dt.seconds) + "." + dt.milliseconds + " ";
if (name.length >= 1) {
str += "[" + name.toUpperCase() + "] ";
}
switch (typeof message) {
case "object":
str += JSON.stringify(message);
break;
default:
str += message;
break;
}
if (type <= this.mode) {
var l = Logger.mode_str[type].length;
var spaces = 8 - l;
var padd = "";
for (var i = 0; i < spaces; i++) {
padd += " ";
}
if (type === 0) {
console.error(Logger.colors[type], Logger.mode_str[type] + padd + ": " + str + Logger.reset);
} else {
console.log(Logger.colors[type], Logger.mode_str[type] + padd + ": " + str + Logger.reset);
}
}
};
Logger.prototype.diff = function(date1, date2) {
var a = new Date(date1).getTime(),
b = new Date(date2).getTime(),
diff = {};
var difference = b - a;
diff.milliseconds = Math.floor(difference % 1000);
var str = "" + diff.milliseconds;
var pad = "0000";
var ans = pad.substring(0, pad.length - str.length) + str;
diff.milliseconds = ans;
difference /= 1000;
diff.seconds = Math.floor(difference % 60);
difference /= 60;
diff.minutes = Math.floor(difference % 60);
difference /= 60;
diff.hours = Math.floor(difference % 24);
difference /= 24;
diff.days = Math.floor(difference);
return diff
};
Logger.prototype.setMode = function(mode) {
this.mode = mode;
};
var logger = new Logger(Logger.modes.TRACE);
function trace(name, message) {
log(Logger.modes.TRACE, name, message);
}
function debug(name, message) {
log(Logger.modes.DEBUG, name, message);
}
function info(name, message) {
log(Logger.modes.INFO, name, message);
}
function warn(name, message) {
log(Logger.modes.WARN, name, message);
}
function error(name, message) {
log(Logger.modes.ERROR, name, message);
}
function log(type, name, message) {
if (message === undefined || message === null) {
logger.log(type, "", name);
} else {
logger.log(type, name, message);
}
}
module.exports = {
trace: trace,
debug: debug,
info: info,
warn: warn,
error: error,
setMode: function(mode) {
logger.setMode(mode);
},
modes: Logger.modes
};