Spaces:
Sleeping
Sleeping
| /** | |
| * Debug utility for consistent logging across the application | |
| */ | |
| // Default to enabling logs in development, disabling in production | |
| const isDevelopment = process.env.NODE_ENV === 'development'; | |
| // Debug configuration - can be modified at runtime | |
| export const debugConfig = { | |
| // Master switch to enable/disable all logs | |
| enabled: isDevelopment, | |
| // Enable/disable logs by category | |
| categories: { | |
| api: true, // API calls and responses | |
| data: true, // Data transformations and state | |
| ui: true, // UI interactions and events | |
| perf: false, // Performance measurements | |
| auth: true, // Authentication related | |
| system: true, // System level operations | |
| } | |
| }; | |
| // Log levels | |
| export enum LogLevel { | |
| DEBUG = 'debug', | |
| INFO = 'info', | |
| WARN = 'warn', | |
| ERROR = 'error' | |
| } | |
| /** | |
| * Log a message if debugging is enabled | |
| * | |
| * @param category - The category this log belongs to | |
| * @param message - The message to log | |
| * @param data - Optional data to include with the log | |
| * @param level - Log level (default: INFO) | |
| */ | |
| export function log( | |
| category: keyof typeof debugConfig.categories, | |
| message: string, | |
| data?: any, | |
| level: LogLevel = LogLevel.INFO | |
| ): void { | |
| // Skip logging if master switch is off or category is disabled | |
| if (!debugConfig.enabled || !debugConfig.categories[category]) { | |
| return; | |
| } | |
| const prefix = `[${category.toUpperCase()}]`; | |
| switch (level) { | |
| case LogLevel.DEBUG: | |
| console.debug(prefix, message, data !== undefined ? data : ''); | |
| break; | |
| case LogLevel.INFO: | |
| console.log(prefix, message, data !== undefined ? data : ''); | |
| break; | |
| case LogLevel.WARN: | |
| console.warn(prefix, message, data !== undefined ? data : ''); | |
| break; | |
| case LogLevel.ERROR: | |
| console.error(prefix, message, data !== undefined ? data : ''); | |
| break; | |
| } | |
| } | |
| // Convenience methods for different log levels | |
| export const debug = { | |
| api: (message: string, data?: any) => log('api', message, data, LogLevel.DEBUG), | |
| data: (message: string, data?: any) => log('data', message, data, LogLevel.DEBUG), | |
| ui: (message: string, data?: any) => log('ui', message, data, LogLevel.DEBUG), | |
| perf: (message: string, data?: any) => log('perf', message, data, LogLevel.DEBUG), | |
| auth: (message: string, data?: any) => log('auth', message, data, LogLevel.DEBUG), | |
| system: (message: string, data?: any) => log('system', message, data, LogLevel.DEBUG), | |
| }; | |
| export const info = { | |
| api: (message: string, data?: any) => log('api', message, data, LogLevel.INFO), | |
| data: (message: string, data?: any) => log('data', message, data, LogLevel.INFO), | |
| ui: (message: string, data?: any) => log('ui', message, data, LogLevel.INFO), | |
| perf: (message: string, data?: any) => log('perf', message, data, LogLevel.INFO), | |
| auth: (message: string, data?: any) => log('auth', message, data, LogLevel.INFO), | |
| system: (message: string, data?: any) => log('system', message, data, LogLevel.INFO), | |
| }; | |
| export const warn = { | |
| api: (message: string, data?: any) => log('api', message, data, LogLevel.WARN), | |
| data: (message: string, data?: any) => log('data', message, data, LogLevel.WARN), | |
| ui: (message: string, data?: any) => log('ui', message, data, LogLevel.WARN), | |
| perf: (message: string, data?: any) => log('perf', message, data, LogLevel.WARN), | |
| auth: (message: string, data?: any) => log('auth', message, data, LogLevel.WARN), | |
| system: (message: string, data?: any) => log('system', message, data, LogLevel.WARN), | |
| }; | |
| export const error = { | |
| api: (message: string, data?: any) => log('api', message, data, LogLevel.ERROR), | |
| data: (message: string, data?: any) => log('data', message, data, LogLevel.ERROR), | |
| ui: (message: string, data?: any) => log('ui', message, data, LogLevel.ERROR), | |
| perf: (message: string, data?: any) => log('perf', message, data, LogLevel.ERROR), | |
| auth: (message: string, data?: any) => log('auth', message, data, LogLevel.ERROR), | |
| system: (message: string, data?: any) => log('system', message, data, LogLevel.ERROR), | |
| }; | |
| export default { | |
| debugConfig, | |
| log, | |
| debug, | |
| info, | |
| warn, | |
| error, | |
| LogLevel | |
| }; |