UNPKG

testify-universal-cli

Version:

Universal interactive CLI tool for scanning and executing tests across multiple programming languages

130 lines (117 loc) 3.31 kB
import chalk from 'chalk'; /** * Logger utility for testify * Supports different log levels and debug mode */ class Logger { constructor() { this.debugMode = false; this.logLevels = { ERROR: 0, WARN: 1, INFO: 2, DEBUG: 3, TRACE: 4 }; this.currentLevel = this.logLevels.INFO; } /** * Enable or disable debug mode * @param {boolean} enabled - Whether debug mode is enabled */ setDebugMode(enabled) { this.debugMode = enabled; this.currentLevel = enabled ? this.logLevels.DEBUG : this.logLevels.INFO; } /** * Set the current log level * @param {string} level - Log level (ERROR, WARN, INFO, DEBUG, TRACE) */ setLogLevel(level) { if (this.logLevels[level] !== undefined) { this.currentLevel = this.logLevels[level]; } } /** * Log an error message * @param {string} message - Message to log * @param {Error} [error] - Optional error object */ error(message, error) { if (this.currentLevel >= this.logLevels.ERROR) { console.error(chalk.red(`[ERROR] ${message}`)); if (error && this.debugMode) { console.error(chalk.red(error.stack || error)); } } } /** * Log a warning message * @param {string} message - Message to log */ warn(message) { if (this.currentLevel >= this.logLevels.WARN) { console.warn(chalk.yellow(`[WARN] ${message}`)); } } /** * Log an info message * @param {string} message - Message to log */ info(message) { if (this.currentLevel >= this.logLevels.INFO) { console.log(chalk.blue(`[INFO] ${message}`)); } } /** * Log a debug message (only in debug mode) * @param {string} message - Message to log * @param {any} [data] - Optional data to log */ debug(message, data) { if (this.currentLevel >= this.logLevels.DEBUG) { console.log(chalk.cyan(`[DEBUG] ${message}`)); if (data !== undefined && this.debugMode) { console.log(chalk.cyan(typeof data === 'object' ? JSON.stringify(data, null, 2) : data)); } } } /** * Log a trace message (most detailed level) * @param {string} message - Message to log * @param {any} [data] - Optional data to log */ trace(message, data) { if (this.currentLevel >= this.logLevels.TRACE) { console.log(chalk.gray(`[TRACE] ${message}`)); if (data !== undefined && this.debugMode) { console.log(chalk.gray(typeof data === 'object' ? JSON.stringify(data, null, 2) : data)); } } } /** * Log a success message * @param {string} message - Message to log */ success(message) { if (this.currentLevel >= this.logLevels.INFO) { console.log(chalk.green(`[SUCCESS] ${message}`)); } } /** * Create a timer for performance logging * @param {string} label - Timer label * @returns {Function} - Function to end the timer */ timer(label) { if (!this.debugMode) return () => {}; const start = process.hrtime(); return () => { const [seconds, nanoseconds] = process.hrtime(start); const duration = seconds * 1000 + nanoseconds / 1000000; this.debug(`Timer [${label}] completed in ${duration.toFixed(2)}ms`); }; } } // Export a singleton instance export const logger = new Logger();