Skip to content

Instantly share code, notes, and snippets.

@wooosh
Last active April 3, 2019 22:57
Show Gist options
  • Save wooosh/021b0cf8a169c8166e34c612869cf848 to your computer and use it in GitHub Desktop.
Save wooosh/021b0cf8a169c8166e34c612869cf848 to your computer and use it in GitHub Desktop.
Javascript Logger
{
"colorsEnabled": true,
"defaultConf": {
"info": {
"enabled": false,
"color": "Blue"
},
"warning": {
"enabled": true,
"color": "Yellow"
},
"error": {
"enabled": true,
"color": "Red"
}
},
"packagepath": "../package.json"
}
// Define color codes for terminal emulators
const Colors = {
Reset: "\x1b[0m",
Bright: "\x1b[1m",
Dim: "\x1b[2m",
Underscore: "\x1b[4m",
Blink: "\x1b[5m",
Reverse: "\x1b[7m",
Hidden: "\x1b[8m",
FgBlack: "\x1b[30m",
FgRed: "\x1b[31m",
FgGreen: "\x1b[32m",
FgYellow: "\x1b[33m",
FgBlue: "\x1b[34m",
FgMagenta: "\x1b[35m",
FgCyan: "\x1b[36m",
FgWhite: "\x1b[37m",
BgBlack: "\x1b[40m",
BgRed: "\x1b[41m",
BgGreen: "\x1b[42m",
BgYellow: "\x1b[43m",
BgBlue: "\x1b[44m",
BgMagenta: "\x1b[45m",
BgCyan: "\x1b[46m",
BgWhite: "\x1b[47m"
}
function generateConfig(loggerConfig) {
let {packagepath, defaultConf} = loggerConfig;
let {name, version} = require(packagepath);
return {
logLevels: require('process').argv.slice(2).reduce(
(config, arg) => {
if (arg.startsWith('-l')) {
config[arg.slice(2)].enabled = true;
}
else if (arg.startsWith('-lr')) {
config[arg.slice(3)].enabled = false;
}
return config;
},
defaultConf
),
name: name,
version: version,
}
}
module.exports = class Logger {
constructor(config) {
// Don't print color codes when colors are not enabled
this.colors = new Proxy(Colors, {
get: function(obj, prop) {
return config.colorsEnabled ? obj[prop] : "";
}
})
this.config = generateConfig(config);
this.generateLogFunctions();
this.printHead();
}
generateLogFunctions() {
Object.keys(this.config.logLevels).forEach( name => this[name] = this.logFunction(name));
}
logFunction(name, enabled) {
return message => this.config.logLevels[name].enabled &&
console.log(`[${this.colors['Fg' + this.config.logLevels[name].color] + name + this.colors.Reset}] message`);
}
printHead() {
// Prints head text like so:
// npm-package-name v7.6.0
console.log(`${this.colors.BgBlue + this.colors.FgWhite + this.config.name + this.colors.Reset} v${this.config.version}`)
}
}
let l = new Logger(require("./log.json"));
l.info('test')
l.warning('test2')
l.error('test3')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment