Skip to content

Instantly share code, notes, and snippets.

@diyfr
Last active July 17, 2019 07:07
Show Gist options
  • Save diyfr/1c682e056ac2496d73ace9f1b5782978 to your computer and use it in GitHub Desktop.
Save diyfr/1c682e056ac2496d73ace9f1b5782978 to your computer and use it in GitHub Desktop.
Static Logger for Js project (Angular, Mithriljs etc...) with color and debug level in environment properties (browser console output)

Init Logger in main.ts

Logger.init('WARN');

And use-it :)

Logger.d("Let's Go");
Logger.i("Let's Go",myObject);
Logger.w("Let's Go",true);
Logger.e("Let's Go");
Logger.table(["one","two","three"]);
enum LEVEL {
DEBUG = 1, INFO = 2, WARN = 3, ERROR = 99, SUCCESS = 100
}
export class Logger {
private static _level: LEVEL = LEVEL.DEBUG;
public static init(level: string = "DEBUG"): void {
console.log("Initialisation Logger");
Logger._level = LEVEL[level];
if (!Logger._level) {
console.error(level + " is an invalid Log Level,Replace it in environment file by DEBUG,INFO,WARN or ERROR");
}
}
public static d(...objects: any[]): void {
if (Logger.showTrace(LEVEL.DEBUG)) {
Logger.output(LEVEL.DEBUG, objects);
}
}
public static i(...objects: any[]): void {
if (Logger.showTrace(LEVEL.INFO)) {
Logger.output(LEVEL.INFO, objects);
}
}
public static w(...objects: any[]): void {
if (Logger.showTrace(LEVEL.WARN)) {
Logger.output(LEVEL.WARN, objects);
}
}
public static e(...objects: any[]): void {
Logger.output(LEVEL.ERROR, objects);
}
public static success(...objects: any[]): void {
Logger.output(LEVEL.SUCCESS, objects);
}
public static table(objects: any): void {
console.table(objects);
}
private static showTrace(level: LEVEL): boolean {
return this._level <= level
}
private static output(level: LEVEL, ...objects: any[]): void {
if (String(objects[0][0]) !== "[object Object]") {
let message = String(objects[0][0]);
objects[0].shift();
Logger.outputWithObjects(level, message, objects[0]);
} else { // default
console.log("default");
switch (level) {
case LEVEL.INFO:
console.info(objects);
break;
case LEVEL.WARN:
console.warn(objects);
break;
case LEVEL.ERROR:
console.error(objects);
break;
case LEVEL.DEBUG:
default:
console.debug(objects);
break;
}
}
}
private static outputWithObjects(level: LEVEL, message: string, ...objects: any[]): void {
switch (level) {
case LEVEL.INFO:
if (objects[0].length > 0)
console.log("%c[INFO] " + message + "\t", 'background: #FF0; color: #000', objects[0]);
else
console.log("%c[INFO] " + message + "\t", 'background: #FF0; color: #000');
break;
case LEVEL.WARN:
if (objects[0].length > 0)
console.log("%c[WARN] " + message + "\t", 'background: #FA0; color: #000', objects[0]);
else
console.log("%c[WARN] " + message + "\t", 'background: #FA0; color: #000');
break;
case LEVEL.ERROR:
if (objects[0].length > 0)
console.log("%c[ERROR] " + message + "\t", 'background: #F00; color: #FFF', objects[0]);
else
console.log("%c[ERROR] " + message + "\t", 'background: #F00; color: #FFF');
break;
case LEVEL.SUCCESS:
if (objects[0].length > 0)
console.log("%c[SUCCESS] " + message + "\t", 'background: #bada55; color: #000', objects[0]);
else
console.log("%c[SUCCESS] " + message + "\t", 'background: #bada55; color: #000');
break;
case LEVEL.DEBUG:
default:
if (objects[0].length > 0)
console.log("[DEBUG] " + message + "\t", objects[0]);
else
console.log("[DEBUG] " + message + "\t");
break;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment