Every project has eight levels available and uses three, inconsistently, so error means “something a developer should look at” in one service and “a customer typed the wrong password” in another. Alerting on level then produces noise.
// the convention worth writing down, in one paragraph, in the README
// critical — the system is not serving; wake someone
// error — a request failed for a reason that is our fault
// warning — degraded, recovered, or a dependency misbehaved
// info — a business event worth counting
// debug — off in production
The line that matters most is between error and warning: a declined card, a validation failure and a 404 are not errors, and logging them as such is what makes an error dashboard useless. Once the convention exists, alerting on critical and on the rate of error becomes meaningful rather than approximate.