Skip to content

typescript.console_in_production

Observability Low

Detects console.log statements that should use proper logging.

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.
// ❌ Before
console.log(`User ${userId} logged in`);
console.error('Error:', error);
// ✅ After
import pino from 'pino';
const logger = pino();
logger.info({ userId }, 'user logged in');
logger.error({ err: error }, 'operation failed');
  • console.log, console.error, console.warn
  • console.debug, console.info

Unfault converts to structured logger calls.

// 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 });
// Bunyan
import bunyan from 'bunyan';
const logger = bunyan.createLogger({ name: 'app' });
logger.info({ userId }, 'message');