Logs: Pensar en los usuarios, no solo en programadores

Fuentes: Log messages are mostly for the people operating your software

En el desarrollo de software, es común que los programadores se enfoquen en crear mensajes de registro (logs) pensando en su propia conveniencia para depurar y comprender el estado del programa. Sin embargo, un punto crucial, a menudo pasado por alto, es que la mayoría de los mensajes de registro deberían estar dirigidos a las personas que operan el software, no solo a los desarrolladores. Esto es especialmente relevante cuando el software se distribuye a otros usuarios o incluso cuando el propio desarrollador regresa al código después de un tiempo.

¿Por qué es importante? Cuando un programa se ejecuta en un entorno de producción, los operadores (administradores de sistemas, ingenieros de DevOps, etc.) son quienes deben interpretar los logs para diagnosticar problemas y entender el comportamiento del sistema. Un log útil para un desarrollador puede ser inútil o incluso confuso para un operador si carece del contexto necesario. Un log que simplemente dice “Error” no es suficiente; debe proporcionar información específica sobre qué ocurrió, por qué ocurrió y, si es posible, cómo se puede solucionar.

¿Cómo funcionan los logs efectivos? Un buen log para un operador debe ser comprensible sin necesidad de un conocimiento profundo del código fuente. Debe proporcionar detalles relevantes sobre el evento, como la hora, el componente afectado, el tipo de error y cualquier dato adicional que pueda ayudar a identificar la causa raíz. Por ejemplo, en lugar de un log genérico como “Error al conectar”, un log útil sería “Error al conectar a la base de datos MySQL en el servidor 192.168.1.100, código de error 2003 (Connection timed out).

Casos de uso y aplicaciones: Este principio es crucial en una amplia gama de aplicaciones, desde servidores web y bases de datos hasta sistemas embebidos y aplicaciones móviles. Los administradores de sistemas de correo electrónico (MTAs), por ejemplo, registran incluso errores esperados como fallos en las búsquedas DNS, ya que permiten rastrear el destino y el procesamiento de mensajes individuales. En entornos de contenedores como Kubernetes, los logs son vitales para diagnosticar problemas en las aplicaciones y la infraestructura subyacente.

Consideraciones: Es importante encontrar un equilibrio entre la verbosidad de los logs y la utilidad para los operadores. Logs excesivamente detallados pueden generar ruido y dificultar la identificación de problemas reales. Además, es crucial evitar incluir información sensible o confidencial en los logs. Una alternativa es implementar diferentes niveles de registro (debug, info, warning, error, critical) y configurar el sistema para que solo se registren los niveles relevantes para los operadores.