foundation
Log levels
Choose debug, info, warn, and error levels by operational actionability rather than by developer habit.
Log levels signal operational urgency: debug for development detail, info for normal lifecycle events, warn for recoverable anomalies, error for failures that need attention. Levels should reflect **actionability**, not developer mood.
| Level | Typical use | |-------|-------------| | debug | Verbose internals; often off in production | | info | Request handled, job completed, deploy finished | | warn | Retries, deprecations, slow dependencies | | error | Failed request, uncaught exception, data loss risk |
if (attempt > 1) logger.warn({ attempt, provider: 'stripe' }, 'payment retry');
logger.error({ err, orderId }, 'payment failed after retries');
Tune production defaults: info or warn baseline, debug enabled temporarily per service during investigations. Avoid logging every successful loop iteration at error "so dashboards see it."
On interviews: default levels per environment, sampling vs full debug, and how log level choices affect alert noise.
Common pitfalls: everything logged as error; debug left on under load; warn used for expected business cases (e.g. 404 on user typo).
The trade-off is signal clarity versus log volume and cost.
Checklist:
- Map levels to operator response expectations.
- Keep production defaults lean.
- Use structured context on warn/error.
- Gate debug behind flags or dynamic config.