terrain50-cli/src/Helpers/Log.mjs

83 lines
1.6 KiB
JavaScript

"use strict";
import a from './Ansi.mjs';
const LOG_LEVELS = {
DEBUG: 0,
INFO: 1,
LOG: 2,
WARN: 4,
ERROR: 8,
NONE: 2048
};
/**
* Provides a simple logging utility. Depends on Ansi.mjs, and originated in my
* personal project woppleblox (which may or may not actually get finished).
*/
class Log {
constructor() {
this.start = new Date();
this.level = LOG_LEVELS.DEBUG;
this.datetime_relative = false;
}
debug(...message) {
if(this.level > LOG_LEVELS.DEBUG) return;
this.__do_log("debug", ...message);
}
info(...message) {
if(this.level > LOG_LEVELS.INFO) return;
this.__do_log("info", ...message);
}
log(...message) {
if(this.level > LOG_LEVELS.LOG) return;
this.__do_log("log", ...message);
}
warn(...message) {
if(this.level > LOG_LEVELS.WARN) return;
this.__do_log("warn", ...message);
}
error(...message) {
if(this.level > LOG_LEVELS.ERROR) return;
this.__do_log("error", ...message);
}
__do_log(level, ...message) {
let part = `[ ${level} ]`;
switch(level) {
case "debug":
part = a.locol + part;
message.push(a.reset);
break;
case "warn":
part = a.fyellow + a.hicol + part;
message.push(a.reset);
break;
case "error":
part = a.fred + a.hicol + part;
message.push(a.reset);
break;
}
let date = this.datetime_relative ? ((new Date() - this.start) / 1000).toFixed(3) : (new Date()).toISOString();
message.unshift(`${part}`);
message.unshift(`${a.locol}[ ${date} ]${a.reset}`);
console.error(...message);
}
}
// You won't normally need these
export { LOG_LEVELS };
export default new Log();