kist
Version:
Lightweight Package Pipeline Processor with Plugin Architecture
55 lines • 1.95 kB
JavaScript
import { LoggerStyles } from "./LoggerStyles.js";
export class Logger {
constructor(logLevel = "info") {
this.logLevel = logLevel;
}
static getInstance(logLevel = "info") {
if (!Logger.instance) {
Logger.instance = new Logger(logLevel);
}
return Logger.instance;
}
static resetInstance() {
Logger.instance = null;
}
log(level, context, message, fgStyle, bgStyle = LoggerStyles.Reset) {
if (this.shouldLog(level)) {
const formattedMessage = `${fgStyle}${bgStyle}[${level.toUpperCase()}]${LoggerStyles.Reset} [${LoggerStyles.Cyan}${context}${LoggerStyles.Reset}] ${message}`;
console[level === "error" ? "error" : level === "warn" ? "warn" : "log"](formattedMessage);
}
}
shouldLog(level) {
const levels = ["debug", "info", "warn", "error"];
return levels.indexOf(level) >= levels.indexOf(this.logLevel);
}
logInfo(context, message) {
this.log("info", context, message, LoggerStyles.Blue);
}
logWarn(context, message) {
this.log("warn", context, message, LoggerStyles.Yellow);
}
logError(context, message, error) {
const formattedMessage = this.formatError(message, error);
this.log("error", context, formattedMessage, LoggerStyles.Red, LoggerStyles.BgYellow);
}
logDebug(context, message) {
this.log("debug", context, message, LoggerStyles.Magenta);
}
setLogLevel(level) {
this.logLevel = level;
}
formatError(message, error) {
if (error instanceof Error) {
return `${message}: ${error.message}`;
}
else if (typeof error === "string") {
return `${message}: ${error}`;
}
else if (error) {
return `${message}: ${JSON.stringify(error)}`;
}
return message;
}
}
Logger.instance = null;
//# sourceMappingURL=Logger.js.map