/** * Centralized logging utility for the application. * * Provides namespace-prefixed logging with environment-based filtering: * - Development: All log levels (DEBUG, INFO, WARN, ERROR) * - Production: Only ERROR logs are shown * * Usage: * ```typescript * import { createLogger } from '@shared/utils/logger'; * const logger = createLogger('IPC:config'); * logger.info('Config loaded'); * logger.error('Failed to load config', error); * ``` */ enum LogLevel { DEBUG = 0, INFO = 1, WARN = 2, ERROR = 3, NONE = 4,} class Logger { private static level: LogLevel = process.env.NODE_ENV === 'production' ? LogLevel.ERROR : LogLevel.WARN; constructor(private namespace: string) {} debug(...args: unknown[]): void { if (Logger.level <= LogLevel.DEBUG) { console.debug(`[${this.namespace}]`, ...args); } } info(...args: unknown[]): void { if (Logger.level <= LogLevel.INFO) { console.log(`[${this.namespace}]`, ...args); } } warn(...args: unknown[]): void { if (Logger.level <= LogLevel.WARN) { console.warn(`[${this.namespace}]`, ...args); } } error(...args: unknown[]): void { if (Logger.level <= LogLevel.ERROR) { console.error(`[${this.namespace}]`, ...args); } } /** Allow runtime level changes (for testing/debugging) */ static setLevel(level: LogLevel): void { Logger.level = level; } static getLevel(): LogLevel { return Logger.level; }} export function createLogger(namespace: string): Logger { return new Logger(namespace);} export type { Logger };
/**
* Centralized logging utility for the application.
*
* Provides namespace-prefixed logging with environment-based filtering:
* - Development: All log levels (DEBUG, INFO, WARN, ERROR)
* - Production: Only ERROR logs are shown
*
* Usage:
* ```typescript
* import { createLogger } from '@shared/utils/logger';
* const logger = createLogger('IPC:config');
* logger.info('Config loaded');
* logger.error('Failed to load config', error);
* ```
*/
enum LogLevel {
DEBUG = 0,
INFO = 1,
WARN = 2,
ERROR = 3,
NONE = 4,
}
class Logger {
private static level: LogLevel =
process.env.NODE_ENV === 'production' ? LogLevel.ERROR : LogLevel.WARN;
constructor(private namespace: string) {}
debug(...args: unknown[]): void {
if (Logger.level <= LogLevel.DEBUG) {
console.debug(`[${this.namespace}]`, ...args);
}
}
info(...args: unknown[]): void {
if (Logger.level <= LogLevel.INFO) {
console.log(`[${this.namespace}]`, ...args);
}
}
warn(...args: unknown[]): void {
if (Logger.level <= LogLevel.WARN) {
console.warn(`[${this.namespace}]`, ...args);
}
}
error(...args: unknown[]): void {
if (Logger.level <= LogLevel.ERROR) {
console.error(`[${this.namespace}]`, ...args);
}
}
/** Allow runtime level changes (for testing/debugging) */
static setLevel(level: LogLevel): void {
Logger.level = level;
}
static getLevel(): LogLevel {
return Logger.level;
}
}
export function createLogger(namespace: string): Logger {
return new Logger(namespace);
}
export type { Logger };