The Mystery of the Slow API
Our monitoring dashboard showed something strange: 40% slower response times during peak hours. The odd part? CPU and memory looked fine.
After days of profiling, we discovered the culprit:
console.log() statements left in production.
Hereโs why theyโre dangerousโand how to fix them.
1. Why console.log() is Worse Than You Think
๐จ Problem #1: Itโs Synchronous (Yes, Really!)
console.log('Logging data:', largeObject); // Blocks the event loop!
โ
Proof:
console.time('sync');
for (let i = 0; i < 1e5; i++) console.log(i); // ~3 seconds!
console.timeEnd('sync');
๐จ Problem #2: Memory Leaks in Logging Libraries
Some logging frameworks buffer logs in memory before writing to disk/network.
-
Example: Unstructured
console.logโ uncontrolled growth in long-running processes.
๐จ Problem #3: Security Risks
console.log('User token:', req.headers.authorization); // ๐ฑ Logs secrets!
2. How We Fixed It
โ Switch to Async Logging (Winston/Pino)
// Before (Dangerous)
console.log(`User ${userId} logged in`);
// After (Safe)
const logger = require('pino')();
logger.info({ userId }, 'User logged in'); // Async + structured
Performance Boost:
| Logger | Req/sec | Latency (p99) |
|--------------|---------|--------------|
| console.log | 8,000 | 120ms |
| Pino | 14,000 | 45ms |
โ Use Log Levels (Avoid Spam in Prod)
if (process.env.NODE_ENV === 'development') {
console.log('Debug info'); // Only in dev
}
โ Automatically Strip Logs in Production
# Use Babel/ESBuild to remove console.* in prod
esbuild app.js --drop:console
3. When console.log is Actually Okay
โ CLI tools (short-lived processes)
โ Early prototyping (before proper logging is set up)
โ Browser debugging (but use debugger instead)
Key Takeaways
๐ console.log blocks the event loop (yes, even in Node.js!)
๐ Uncontrolled logging tanks performance (we lost 40% throughput)
๐ Logs can leak secrets (check for sensitive data)
๐ Use Pino/Winston for async, structured logging
Further Reading
Have you been burned by logging in prod? Share your story!
Top comments (0)