Observability · 2026

Your logs are useless at 2am.
The 4-line change that makes every production bug findable.

console.log got you to launch. It will not get you through your first 2am outage. Here is how to make production logs you can actually search, in an afternoon.

Logs that page you first.

Belmo's AI log monitoring reads your structured logs, spots patterns like a climbing checkout_failed rate or a retry loop, and explains them on Telegram in plain English.

No credit card required 1 service free forever AI log monitoring Telegram alerts in plain English
Frequently asked

Quick answers

What is structured logging?

Writing each log line as an object with named fields instead of a sentence. A line like {"event":"checkout_failed","userId":"u_8812","err":"..."} can be searched by field, so event:checkout_failed finds every checkout failure no matter how the surrounding code was worded.

What is a request ID and why does it matter?

A random ID generated at the start of each request and attached to every log line produced while handling it. Searching for one ID gives you the complete, ordered story of that request, with nothing from other users mixed in. Return it in error responses so a customer can paste it to support.

Which log levels should I use?

error for things a human needs to look at, warn for problems that recovered, info for business events you would want to count, and debug for detail you only turn on while hunting a bug. Run production at info and above.

What should I never put in logs?

Secrets, full request bodies and personal data you would not want in a support tool. Logging req.body will eventually write a password, card number or API key in plaintext. Log fields by name and configure a redact list, which Pino supports directly.

Does structured logging slow my app down?

Not noticeably with a fast logger like Pino. The expensive mistake is logging inside tight loops, where one debug line can run tens of thousands of times per request. Log the summary, not every iteration.