/** * Logger - Structured logging for RPG-MCP * * Hygiene Improvement: Replaces raw console statements with structured logging. * * Features: * - Log levels (debug, info, warn, error) * - Environment-based log level control (RPG_LOG_LEVEL) * - Module prefixes for easy filtering * - Silent mode for tests * - MCP-compatible stderr output (stdout reserved for MCP protocol) * * Usage: * import { createLogger } from '../utils/logger.js'; * const log = createLogger('Combat'); * * log.debug('Detailed info'); // Only shown when RPG_LOG_LEVEL=debug * log.info('Normal operation'); * log.warn('Potential issue'); * log.error('Something broke'); * * Environment: * RPG_LOG_LEVEL=debug|info|warn|error|silent (default: info) * NODE_ENV=test automatically sets silent */ export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent'; export interface Logger { debug(message: string, ...args: unknown[]): void; info(message: string, ...args: unknown[]): void; warn(message: string, ...args: unknown[]): void; error(message: string, ...args: unknown[]): void; /** Create a child logger with additional prefix */ child(prefix: string): Logger; /** Check if a log level is enabled */ isEnabled(level: LogLevel): boolean; } /** * Reset the cached level (useful for tests) */ export declare function resetLogLevel(): void; /** * Override the log level programmatically */ export declare function setLogLevel(level: LogLevel): void; /** * Create a logger instance with the given module prefix * * @example * const log = createLogger('Combat'); * log.info('Combat started'); * // Output: [12:34:56.789] [INFO ] [Combat] Combat started * * const childLog = log.child('Initiative'); * childLog.debug('Rolling initiative'); * // Output: [12:34:56.790] [DEBUG] [Combat:Initiative] Rolling initiative */ export declare function createLogger(prefix: string): Logger; /** * Global logger instance for quick access * Prefer creating module-specific loggers with createLogger() */ export declare const logger: Logger; /** * Log a structured object with pretty formatting */ export declare function logObject(logger: Logger, level: LogLevel, label: string, obj: unknown): void; /** * Create a timer for performance logging * * @example * const timer = createTimer(log); * // ... do work ... * timer.done('Operation completed'); // Logs with duration */ export declare function createTimer(logger: Logger): { done: (message: string) => void; }; /** * Wrap an async function with entry/exit logging */ export declare function withLogging(logger: Logger, name: string, fn: (...args: TArgs) => Promise): (...args: TArgs) => Promise; /** * Safely extract error message from unknown error type */ export declare function getErrorMessage(error: unknown): string; /** * Log an error with stack trace if available */ export declare function logError(logger: Logger, message: string, error: unknown): void; //# sourceMappingURL=logger.d.ts.map