typescript.console_in_production
Observability
Low
Detects console.log statements that should use proper logging.
Why It Matters
Section titled “Why It Matters”Console.log is inadequate for production:
- No structure — Can’t query or filter logs
- No levels — Can’t distinguish info from errors
- Performance — Synchronous and blocks the event loop
- No context — Missing timestamps, request IDs, etc.
Example
Section titled “Example”// ❌ Beforeconsole.log(`User ${userId} logged in`);console.error('Error:', error);// ✅ Afterimport pino from 'pino';const logger = pino();
logger.info({ userId }, 'user logged in');logger.error({ err: error }, 'operation failed');What Unfault Detects
Section titled “What Unfault Detects”console.log,console.error,console.warnconsole.debug,console.info
Auto-Fix
Section titled “Auto-Fix”Unfault converts to structured logger calls.
Logging Libraries
Section titled “Logging Libraries”// Pino (fast, structured)import pino from 'pino';const logger = pino({ level: 'info' });logger.info({ userId }, 'message');
// Winston (feature-rich)import winston from 'winston';const logger = winston.createLogger({ format: winston.format.json(),});logger.info('message', { userId });
// Bunyanimport bunyan from 'bunyan';const logger = bunyan.createLogger({ name: 'app' });logger.info({ userId }, 'message');