cloc-graph
Version:
Track lines of code over time by language with visualization
120 lines (119 loc) • 3.39 kB
JavaScript
;
/**
* Structured logging utility
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.logger = exports.Logger = void 0;
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
LogLevel[LogLevel["INFO"] = 1] = "INFO";
LogLevel[LogLevel["WARN"] = 2] = "WARN";
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
})(LogLevel || (LogLevel = {}));
/**
* Default logger configuration
*/
const defaultConfig = {
level: LogLevel.INFO,
colorize: true,
timestamp: true,
};
/**
* Terminal colors for colorized logging
*/
const colors = {
reset: '\x1b[0m',
bright: '\x1b[1m',
debug: '\x1b[36m', // Cyan
info: '\x1b[32m', // Green
warn: '\x1b[33m', // Yellow
error: '\x1b[31m', // Red
};
/**
* A structured logger for the application
*/
class Logger {
/**
* Creates a new Logger instance
*
* @param config - Logger configuration
*/
constructor(config = {}) {
this.config = Object.assign(Object.assign({}, defaultConfig), config);
}
/**
* Format a log message with optional colorization and timestamp
*
* @param level - Log level
* @param message - Log message
* @param context - Additional context data
* @returns Formatted log message
*/
formatMessage(level, message, context) {
const levelNames = ['DEBUG', 'INFO ', 'WARN ', 'ERROR'];
let levelName = levelNames[level];
if (this.config.colorize) {
const colorKey = LogLevel[level].toLowerCase();
levelName = `${colors[colorKey]}${colors.bright}${levelName}${colors.reset}`;
}
let timestamp = '';
if (this.config.timestamp) {
timestamp = new Date().toISOString() + ' ';
}
let formattedContext = '';
if (context && Object.keys(context).length > 0) {
formattedContext = ' ' + JSON.stringify(context);
}
return `${timestamp}${levelName}: ${message}${formattedContext}`;
}
/**
* Log a debug message
*
* @param message - Debug message
* @param context - Optional context data
*/
debug(message, context) {
if (this.config.level <= LogLevel.DEBUG) {
console.debug(this.formatMessage(LogLevel.DEBUG, message, context));
}
}
/**
* Log an info message
*
* @param message - Info message
* @param context - Optional context data
*/
info(message, context) {
if (this.config.level <= LogLevel.INFO) {
console.info(this.formatMessage(LogLevel.INFO, message, context));
}
}
/**
* Log a warning message
*
* @param message - Warning message
* @param context - Optional context data
*/
warn(message, context) {
if (this.config.level <= LogLevel.WARN) {
console.warn(this.formatMessage(LogLevel.WARN, message, context));
}
}
/**
* Log an error message
*
* @param message - Error message
* @param context - Optional context data
*/
error(message, context) {
if (this.config.level <= LogLevel.ERROR) {
console.error(this.formatMessage(LogLevel.ERROR, message, context));
}
}
}
exports.Logger = Logger;
/**
* Default application logger instance
*/
exports.logger = new Logger();