UNPKG

jbs-simple-console-logger

Version:

A simplistic logger class for writing easy to read console.logs

127 lines (110 loc) 3.07 kB
/** * @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 };