Refs #80 - Unified Debug Logging System
Create centralized frontend logger that respects VITE_LOG_LEVEL and includes request correlation.
frontend/src/utils/logger.ts
frontend/vite.config.ts
type LogLevel = 'debug' | 'info' | 'warn' | 'error'; const LEVELS: Record<LogLevel, number> = { debug: 0, info: 1, warn: 2, error: 3 }; const validLevels: LogLevel[] = ['debug', 'info', 'warn', 'error']; const rawLevel = (import.meta.env.VITE_LOG_LEVEL || 'info').toLowerCase() as LogLevel; const LOG_LEVEL = validLevels.includes(rawLevel) ? rawLevel : 'info'; if (rawLevel !== LOG_LEVEL) { console.warn(`Invalid VITE_LOG_LEVEL "${import.meta.env.VITE_LOG_LEVEL}", falling back to "info"`); } const shouldLog = (level: LogLevel): boolean => LEVELS[level] >= LEVELS[LOG_LEVEL]; // Sanitize sensitive data const sanitize = (meta?: object): object | undefined => { if (!meta) return undefined; const sanitized = { ...meta }; const sensitiveKeys = ['token', 'password', 'secret', 'authorization', 'apiKey']; for (const key of Object.keys(sanitized)) { if (sensitiveKeys.some(s => key.toLowerCase().includes(s))) { (sanitized as any)[key] = '[REDACTED]'; } } return sanitized; }; export const logger = { debug: (msg: string, meta?: object): void => { if (shouldLog('debug')) { try { console.debug(`[DEBUG] ${msg}`, sanitize(meta)); } catch { /* Fail silently */ } } }, info: (msg: string, meta?: object): void => { if (shouldLog('info')) { try { console.log(`[INFO] ${msg}`, sanitize(meta)); } catch { /* Fail silently */ } } }, warn: (msg: string, meta?: object): void => { if (shouldLog('warn')) { try { console.warn(`[WARN] ${msg}`, sanitize(meta)); } catch { /* Fail silently */ } } }, error: (msg: string, meta?: object): void => { if (shouldLog('error')) { try { console.error(`[ERROR] ${msg}`, sanitize(meta)); } catch { /* Fail silently */ } } }, }; export default logger;
Update API client to:
Depends on #80-A (config generator)
Milestone 3: Frontend Logging
No dependencies set.
The note is not visible to the blocked user.
Parent Issue
Refs #80 - Unified Debug Logging System
Scope
Create centralized frontend logger that respects VITE_LOG_LEVEL and includes request correlation.
Files to Create/Modify
frontend/src/utils/logger.tsfrontend/vite.config.ts- Ensure VITE_LOG_LEVEL is availableImplementation Details
logger.ts
API Client Integration
Update API client to:
Acceptance Criteria
Dependencies
Depends on #80-A (config generator)
Milestone
Milestone 3: Frontend Logging