2021-05-08 22:41:28 +03:00

106 lines
2.4 KiB
JavaScript

let _level = null;
class Logger {
static levels = ['error', 'warn', 'info', 'debug'];
constructor(level) {
if (!_level) {
_level = level || 'debug';
}
this.isBrowser = typeof process === 'undefined'
|| process.type === 'renderer'
|| process.browser === true
|| process.__nwjs;
if (!this.isBrowser) {
this.colors = {
start: '\x1b[2m',
warn: '\x1b[35m',
info: '\x1b[33m',
debug: '\x1b[36m',
error: '\x1b[31m',
end: '\x1b[0m',
};
} else {
this.colors = {
start: '%c',
warn: 'color : #ff00ff',
info: 'color : #ffff00',
debug: 'color : #00ffff',
error: 'color : #ff0000',
end: '',
};
}
this.messageFormat = '[%t] [%l] - [%m]';
}
static setLevel(level) {
_level = level;
}
/**
*
* @param level {string}
* @returns {boolean}
*/
canSend(level) {
return (Logger.levels.indexOf(_level) >= Logger.levels.indexOf(level));
}
/**
* @param message {string}
*/
warn(message) {
this._log('warn', message, this.colors.warn);
}
/**
* @param message {string}
*/
info(message) {
this._log('info', message, this.colors.info);
}
/**
* @param message {string}
*/
debug(message) {
this._log('debug', message, this.colors.debug);
}
/**
* @param message {string}
*/
error(message) {
this._log('error', message, this.colors.error);
}
format(message, level) {
return this.messageFormat.replace('%t', new Date().toISOString())
.replace('%l', level.toUpperCase())
.replace('%m', message);
}
/**
* @param level {string}
* @param message {string}
* @param color {string}
*/
_log(level, message, color) {
if (!_level) {
return;
}
if (this.canSend(level)) {
if (!this.isBrowser) {
console.log(color + this.format(message, level) + this.colors.end);
} else {
console.log(this.colors.start + this.format(message, level), color);
}
} else {
}
}
}
module.exports = Logger;