Files
SponsorBlockServer/src/utils/logger.ts
2021-07-04 01:36:03 -04:00

90 lines
1.9 KiB
TypeScript

import {config} from '../config';
const enum LogLevel {
ERROR = "ERROR",
WARN = "WARN",
INFO = "INFO",
DEBUG = "DEBUG"
}
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",
};
class Logger {
private _settings = {
ERROR: true,
WARN: true,
INFO: false,
DEBUG: false,
};
constructor() {
if (config.mode === 'development') {
this._settings.INFO = true;
this._settings.DEBUG = true;
} else if (config.mode === 'test') {
this._settings.WARN = false;
}
}
error(str: string) {
this.log(LogLevel.ERROR, str);
}
warn(str: string) {
this.log(LogLevel.WARN, str);
}
info(str: string) {
this.log(LogLevel.INFO, str);
}
debug(str: string) {
this.log(LogLevel.DEBUG, str);
}
private log(level: LogLevel, str: string) {
if (!this._settings[level]) {
return;
}
let color = colors.Bright;
if (level === LogLevel.ERROR) color = colors.FgRed;
if (level === LogLevel.WARN) color = colors.FgYellow;
let levelStr = level.toString();
if (levelStr.length === 4) {
levelStr += " "; // ensure logs are aligned
}
console.log(colors.Dim, `${levelStr} ${new Date().toISOString()}: `, color, str, colors.Reset);
}
}
const loggerInstance = new Logger();
export {
loggerInstance as Logger
};