constructor() {
		onEnableDebug(() => (this.logLevel = 4));
		// TODO: Add winston, pino, or a similar library (?)
		this.#logger = {
			/**
			 *
			 * @param {keyof typeof EvidenceLogger.EvidenceLogLevels} level
			 * @param {string} message
			 * @param {Record<string, any>} meta
			 */
			log: (level, message, meta) => {
				/** @type {any[]} */
				const args = [message];
				if (meta) args.push(meta);
				if (EvidenceLogger.EvidenceLogLevels[level] > this.logLevel) return;
				switch (level) {
					case 'fatal':
					case 'error':
						console.error(`[${level.toUpperCase()}]: `, ...args);
						break;
					case 'warn':
						console.warn(`[${level.toUpperCase()}]: `, ...args);
						break;
					default:
					case 'info':
						console.info(`[${level.toUpperCase()}]: `, ...args);
						break;
					case 'debug':
						console.debug(`[${level.toUpperCase()}]: `, ...args);
						break;
					case 'verbose':
						console.debug(`[${level.toUpperCase()}]: `, ...args);
						break;
				}
			}
		};
	}
@type {EvidenceLogger.EvidenceLogLevels[keyof EvidenceLogger.EvidenceLogLevels]}