Una introducción al registro para programadores

Hay una parte del desarrollo de software que no todos los desarrolladores se toman muy en serio. Esa parte es un registro adecuado y todos los que han perdido incontables horas durante la depuración saben exactamente a qué me refiero.

Los registros útiles pueden proporcionar al desarrollador (especialmente cuando alguien tiene que depurar / mantener el código de otra persona) una tremenda ayuda cuando intenta comprender lo que realmente hace el código. Algunos desarrolladores dicen que el seguimiento de pila es todo lo que alguien debería necesitar, pero eso no podría estar más lejos de la verdad. Los seguimientos de pila son geniales y pueden decirle dónde y qué salió mal, pero no pueden decirle cómo llegó allí en primer lugar. Seguramente puede seguir la ejecución a través de los puntos de interrupción, pero ir a ciegas hará que todo el proceso lleve mucho más tiempo de lo que realmente debería y podría ser.

Esa es la parte de diagnóstico del registro, la más importante y básicamente la que los desarrolladores podrían entender más fácilmente, ya que es más parte de su rutina diaria de trabajo. Hay otra parte que se llama registro de auditoría . Donde el registro de diagnóstico se encarga de registrar los eventos que ocurren durante el tiempo de ejecución (llamadas a métodos, entradas / salidas, llamadas HTTP, ejecuciones de SQL), el registro de auditoría es responsable de registrar eventos de lógica empresarial más abstractos. Dichos eventos pueden ser acciones del usuario (agregar / editar / eliminar contenido, transacciones, datos de acceso) u otras cosas que tienen valor gerencial o, lo que es más importante, valor legal.

En el mundo del back-end, ha habido algunos marcos de registro excelentes para elegir, ya que la necesidad surgió mucho antes. Por ejemplo, en Java, puede elegir entre el motor de registro propio de Java, java.util.logging o algunos excelentes marcos externos como Logback o el más popular Log4j.

En el mundo del front-end, las cosas aún no han llegado tan lejos, pero hay opciones que pueden ayudarlo a hacer un esfuerzo adicional (y, por supuesto, a deshacerse de los mensajes triviales de console.log). Dos de estas bibliotecas de Javascript para el front-end son el nivel de registro mínimo pero poderoso y el navegador-bunyan, un puerto del increíble módulo de registro node.js para el navegador. Algunas características son comunes entre esos marcos, pero hay algunas únicas que deberían guiar al desarrollador a elegir cuál necesita. El uso de estos se puede mostrar con algunos ejemplos.

Manifiesto: Los registros del servidor deben estar estructurados. JSON es un buen formato. Vamos a hacer eso.

Como dice el manifiesto original de Bunyan, los registros deben estructurarse y ser indexados, filtrados y buscados fácilmente. Este impresionante marco produce registros en formato JSON que luego pueden ser consumidos fácilmente por otros servicios para su posterior procesamiento.

Además de la capacidad de exportación JSON, Bunyan tiene el concepto de registradores secundarios, que se pueden usar para crear diferentes registradores para diferentes componentes de la aplicación. Eso brinda una gran flexibilidad en cuanto a qué campos e información adicional desea incluir solo en partes específicas de su aplicación. Bunyan también incorpora transmisiones, que son la configuración de 'salida' de sus registradores. Puede crear múltiples flujos y asignar uno más a cada registrador y cada flujo puede tener diferentes configuraciones, como el nivel mínimo de registros para registrar (los niveles aceptables de Bunyan son fatal / error / warn / info / debug / trace) o método de salida ( en el navegador solo hay opciones relacionadas con la consola pero, en un entorno de nodo, puede hacer otras cosas como escribir registros en un archivo específico).

Esta es una biblioteca de registro diaria confiable y básica. No hace cosas elegantes, no le permite reconfigurar los appenders o agregar reglas complejas de filtrado de registros o hervir té (es una pena), pero tiene todas las funciones básicas que realmente usa.

Con una declaración bastante modesta, loglevel se presenta como un marco de registro mínimo que agrega solo lo mínimo que necesitan la mayoría de las aplicaciones. Agrega un registro adecuado basado en el nivel (rastreo / depuración / información / advertencia / error) y filtrado en cuanto a cuál es el nivel mínimo que se mostrará en la consola.

El poder de este marco es su simplicidad, ya que es muy fácil incorporarlo a su proyecto y comenzar a usarlo, reemplazando el archivo console.log () para siempre. Además, loglevel tiene una joya escondida más, su extensibilidad, ya que hay varios complementos escritos para él, que brindan características adicionales para aquellos que las desean, como prefijar mensajes.

Cualquiera que sea el marco que elija al final para su aplicación JavaScript, seguramente ahorrará muchas horas de trabajo durante la depuración y hará que su aplicación esté más preparada para el futuro.