Respondo esto desde una arquitectura basada en componentes, donde una organización puede estar ejecutando muchos componentes que pueden depender unos de otros. Durante una falla de propagación, los niveles de registro deberían ayudar a identificar qué componentes están afectados y cuáles son la causa raíz.
ERROR : este componente ha tenido una falla y se cree que la causa es interna (cualquier excepción interna no controlada, falla de dependencia encapsulada ... por ejemplo, base de datos, ejemplo REST si hubiera recibido un error 4xx de una dependencia). Sácame (mantenedor de este componente) de la cama.
WARN : este componente ha tenido una falla que se cree que es causada por un componente dependiente (el ejemplo REST sería un estado 5xx de una dependencia). Saque a los mantenedores de ESE componente de la cama.
INFORMACIÓN - Cualquier otra cosa que queramos llegar a un operador. Si decide registrar rutas felices, le recomiendo limitar a 1 mensaje de registro por operación significativa (por ejemplo, por solicitud HTTP entrante).
Para todos los mensajes de registro, asegúrese de registrar el contexto útil (y priorice hacer que los mensajes sean legibles / útiles para los humanos en lugar de tener montones de "códigos de error")
- DEPURACIÓN (y a continuación): no debe usarse en absoluto (y ciertamente no en producción). En desarrollo, recomendaría usar una combinación de TDD y depuración (cuando sea necesario) en lugar de código contaminante con declaraciones de registro. En producción, el registro INFO anterior, combinado con otras métricas debería ser suficiente.
Una buena manera de visualizar los niveles de registro anteriores es imaginar un conjunto de pantallas de monitoreo para cada componente. Cuando todo funciona bien, son verdes, si un componente registra una ADVERTENCIA, se volverá naranja (ámbar) si algo registra un ERROR y luego se pondrá rojo.
En el caso de un incidente, debe tener un componente (causa raíz) que se vuelve rojo y todos los componentes afectados deben ser de color naranja / ámbar.