¿Tienes problemas para depurar tu código? ¿Está buscando algunas soluciones de registro que puedan facilitar la depuración? Siga leyendo para obtener más información. 

El desarrollo de software pasa por varias fases: recopilación de requisitos, análisis, codificación, prueba y mantenimiento. De todas estas fases, la fase de codificación/desarrollo requiere mucho tiempo y esfuerzo. Los ingenieros de software se ocupan de errores de sintaxis, errores lógicos y errores de tiempo de ejecución. Los errores sintácticos se identifican en tiempo de compilación y ocurren debido a que el código no cumple con las reglas de un lenguaje de programación.

Por otro lado, el entorno de desarrollo integrado (IDE) no puede identificar los errores lógicos y de tiempo de ejecución y, a menudo, son difíciles de depurar y corregir. La resolución de errores es un proceso lento y requiere mucha depuración.

La depuración es un proceso en el que uno intenta comprender por qué el código escrito no funciona como se esperaba. Es fácil solucionar el problema cuando conocemos el error y las líneas exactas del código donde se está produciendo. Por lo tanto, el registro es muy útil para depurar código.  

¿Qué es el registro?

El registro es una técnica en la que se capturan mensajes durante la ejecución de un programa. Uno tiene que registrar solo esos mensajes, lo que podría ayudarlos en la depuración. Por lo tanto, saber cuándo agregar declaraciones de registro al código es extremadamente importante. Además, la diferenciación entre declaraciones de registro es igualmente esencial. Hay varios niveles en el registro, como información, advertencia, error, depuración y detallado. Las declaraciones de error y advertencia se utilizan para el manejo de excepciones.

Los datos que se devuelven de las funciones, los resultados después de la manipulación de matrices, los datos recuperados de las API, etc., son algunos ejemplos de datos que se pueden registrar mediante declaraciones de información. Los registros detallados y de depuración se utilizan para proporcionar una descripción detallada de los errores.

El registro de depuración brinda información sobre el seguimiento de la pila, los parámetros de entrada y salida, etc. "Detallado" no es tan detallado como el registro de "depuración", pero proporciona una lista de todos los eventos que han ocurrido. Los registros se escriben en la consola, los archivos y el flujo de salida. Las herramientas de gestión de registros se pueden utilizar para el registro estructurado y formateado.

Registro de Node.js

Nodejs es un entorno de tiempo de ejecución de javascript. Las aplicaciones de Node.js son asincrónicas y sin bloqueo, y se utilizan en sistemas de tiempo real y de uso intensivo de datos. La mejor forma de obtener más información sobre Node.js es consultar los tutoriales de Node.js y sus documentación. Es necesario iniciar sesión para mejorar el rendimiento, la solución de problemas y el seguimiento de errores. El inicio de sesión en Node.js se puede realizar mediante la función incorporada console.log. Además, la función de depuración está interconectada con múltiples paquetes y se puede usar de manera efectiva.

El middleware se utiliza para gestionar solicitudes y respuestas. El middleware podría ser una aplicación o cualquier otro marco de Javascript. El inicio de sesión en el middleware se puede realizar a través de aplicaciones y enrutadores. Cualquier registrador de Node.js debe usar el comando npm o yarn install para instalar los registradores.

Npm significa "Administrador de paquetes de nodos" e YARN significa "Otro negociador de recursos". Sin embargo, se prefiere Yarn a npm, ya que es más rápido e instala los paquetes en forma paralela.

Algunos de los mejores registradores de Node.js se enumeran a continuación:

Pino

Pino es una biblioteca que es uno de los mejores registradores para aplicaciones Node.js. Es de código abierto, extremadamente rápido y registra las declaraciones en un formato JSON fácil de leer. Algunos de los niveles de registro de Pino son: mensajes de depuración, advertencia, error e información. Se puede importar una instancia de registrador de Pino al proyecto, y las declaraciones de console.log deben reemplazarse con declaraciones de logger.info.

Video de Youtube

Use el siguiente comando para instalar Pino:

$ npm install pino   

Los registros generados son elaborados y en formato JSON, resaltando el número de línea del registro, el tipo de registro, la hora en que se registró, etc. Pino genera una sobrecarga mínima de registro en una aplicación y es extremadamente flexible al procesar registros.

Pino se puede integrar con marcos web como Hapi, Restify, Express, etc. Los registros generados por Pino también se pueden almacenar en archivos. Utiliza subprocesos de trabajo para la operación y es compatible con TypeScript. 

Winston

Winston admite el registro para varios marcos web con su enfoque principal en la flexibilidad y la extensibilidad. Admite múltiples tipos de transporte y puede almacenar registros en varias ubicaciones de archivos. Los transportes son lugares donde se almacenan los mensajes de registro.

Junto con algunos transportes integrados como Http, Console, File y Stream, admite otros transportes como Cloud Watch y MongoDB. Realiza registros en varios niveles y formatos. Los niveles de registro indican la gravedad del problema. 

Video de Youtube

Los distintos niveles de registro son los que se muestran a continuación:

{
  error: 0,
  warn: 1,
  info: 2,
  http: 3,
  verbose: 4,
  debug: 5,
  silly: 6
}

El formato de salida del registro también se puede personalizar, filtrar y combinar. Los registros incluyen información sobre la marca de tiempo, etiquetas asociadas con un registro, milisegundos transcurridos desde el registro anterior, etc.

Winston también maneja excepciones y promesas no cumplidas. Proporciona funciones adicionales, como el archivo de tiempo de ejecución de consultas, registros de transmisión, etc. En primer lugar, hay que instalar Winston. Luego, se crea un objeto de configuración de Winston, junto con el transporte, para almacenar el registro. Un objeto registrador se crea mediante la función createLogger() y se le pasa el mensaje de registro.     

Node-Bunyan

Bunyán se utiliza para iniciar sesión rápidamente en node.js en formato JSON. También proporciona una herramienta CLI (Command Line Interface) para ver los registros. Es liviano y admite varios entornos de tiempo de ejecución como Node.js, Browserify, WebPack y NW.js. El formato JSON de los registros se embellece aún más con la bonita función de impresión. Los registros tienen varios niveles como fatal, error, advertencia, información, depuración y rastreo; cada uno está asociado con un valor numérico.

Se registran todos los niveles por encima del nivel establecido para la instancia. Bunyan stream es un lugar donde se registran las salidas. Los subcomponentes de una aplicación se pueden registrar mediante la función log.child(). Todos los registradores secundarios están vinculados a una aplicación principal específica. El tipo de flujo podría ser un archivo, un archivo giratorio, datos sin procesar, etc. A continuación se muestra el ejemplo de código para definir un flujo:

var bunyan = require('bunyan');
var log = bunyan.createLogger({
    name: "foo",
    streams: [
        {
            stream: process.stderr,
            level: "debug"
        },
        ...
    ]
});

Bunyan también admite el registro de DTrace. Las sondas involucradas en el registro de DTrace incluyen log-trace, log-warn, log-error, log-info, log-debug y log-fatal. Bunyan usa serializadores para producir los registros en formato JSON. Las funciones del serializador no lanzan excepciones y son defensivas.  

Loglevel

Nivel de registro se utiliza para iniciar sesión en aplicaciones Javascript. También es uno de los mejores registradores de Node.js, ya que es liviano y simple. Registra el nivel dado y utiliza un solo archivo sin dependencias para el registro. El nivel de registro predeterminado es "advertir". Las salidas de registro están bien formateadas junto con los números de línea. Algunos métodos utilizados para el registro son seguimiento, depuración, advertencia, error e información.

Son resistentes al fracaso en cualquier entorno. getLogger() es el método utilizado para recuperar el objeto registrador. También se puede combinar con otros complementos para ampliar sus funciones. Algunos de los complementos incluyen loglevel-plugin-prefix, loglevel-plugin-remote, ServerSend y DEBUG. El complemento para agregar mensajes de prefijo al registro se muestra a continuación:

var originalFactory = log.methodFactory;
log.methodFactory = function (methodName, logLevel, loggerName) {
    var rawMethod = originalFactory(methodName, logLevel, loggerName);

    return function (message) {
        rawMethod("Newsflash: " + message);
    };
};
log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

Las compilaciones se ejecutan con el comando npm run dist y las pruebas se pueden ejecutar con el comando npm test. El nivel de registro es compatible con los paquetes Webjar, Bower y Atmosphere. Se lanza una nueva versión de Loglevel cada vez que se agregan nuevas funciones.

Signale

Signale consta de 19 registradores para aplicaciones Javascript. Admite TypeScript y registro de ámbito. Consta de temporizadores que ayudan a registrar la marca de tiempo, los datos y el nombre del archivo. Además de los 19 registradores como await, complete, fatal, fav, info, etc., se pueden crear registros personalizados.

Los registros personalizados se crean definiendo un objeto JSON y campos con los datos del registrador. También se pueden crear registradores interactivos. Cuando un registrador interactivo se establece en verdadero, los nuevos valores de los registradores interactivos anulan los anteriores.

La mejor parte de Signale es la capacidad de filtrar información secreta o confidencial. Varios secretos se almacenan en una matriz. addSecrets() y clearSecrets() son las funciones utilizadas para agregar y borrar los secretos de la matriz. Boostnote, Docz, Shower, Taskbook y Vant usan Signale para iniciar sesión. La sintaxis para llamar a las API desde Signale es la siguiente:

signale.<logger>(message[,message]|messageObj|errorObj)

El número de descargas de Signale supera el millón al momento de escribir este artículo. 

Tracer

Trazador se utiliza para producir mensajes de registro detallados. Los mensajes de registro consisten en marcas de tiempo, nombres de archivos, números de línea y nombres de métodos. Se pueden instalar paquetes auxiliares para personalizar el formato de registro de salida. Los paquetes auxiliares se pueden instalar con el siguiente comando.

 npm install -dev tracer

Tracer admite el transporte de archivos, secuencias y MongoDB. Es compatible con la consola de color y las condiciones de filtro en el registro. Inicialmente, el rastreador debe instalarse mediante npm install. En segundo lugar, se debe crear un objeto registrador y se debe seleccionar el tipo de consola. Luego, los distintos niveles o tipos de registro se pueden especificar sobre el objeto para un registro posterior.

Se pueden crear filtros personalizados definiendo funciones sincrónicas con la lógica comercial presente en el cuerpo de la función. Las microplantillas como tinytim también se pueden usar para el registro del sistema.

Cabin.js

Cabina se utiliza para el registro del lado del servidor y del cliente de las aplicaciones node.js. Se utiliza cuando se requiere el enmascaramiento de información sensible y crítica. Esto incluye números de tarjetas de crédito, encabezados BasicAuth, salts, contraseñas, tokens CSRF y números de cuentas bancarias. El fragmento de código siguiente muestra el registro mediante Cabin.js.

const Cabin = require('cabin');
const cabin = new Cabin();
cabin.info('hello world');
cabin.error(new Error('oops!'));

Consta de más de 1600 nombres de campo. También sigue el principio de Bring Your Own Logger (BYOL). Esto lo hace compatible con varios otros registradores como Axe, Pino, Bunyan, Winston, etc. Reduce los costos de almacenamiento en discos debido a la transmisión automática y los búferes de cabina. Es compatible con varias plataformas y fácil de depurar.

El registro del lado del servidor requiere el uso de middleware para el enrutamiento y el registro de salida automático. El registro del lado del navegador requiere solicitudes y scripts XHR. Utiliza Axe que muestra metadatos, es decir, datos sobre datos, seguimientos de pila y otros errores. SHOW_STACK y SHOW_META son variables booleanas configuradas en verdadero o falso para mostrar u ocultar seguimientos de pila y metadatos. 

Npmlog

Npmlog es un tipo básico de registrador que utiliza npm. Algunos de los métodos de registro utilizados son nivel, registro, maxRecordSize, prefixStyle, header y stream. También es compatible con el registro de color. Los distintos niveles de registro son tonto, detallado, información, advertencia, http y error. A continuación, se muestra un fragmento de código de muestra para usar el registro npm.

var log = require('npmlog')

// additional stuff ---------------------------+
// message ----------+                         |
// prefix ----+      |                         |
// level -+   |      |                         |
//        v   v      v                         v
    log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

Todos los mensajes se suprimen si se especifica "Infinito" como nivel de registro. Si se especifica "-Infinito" como nivel de registro, la opción para ver los mensajes de registro debe estar habilitada para ver los registros.

Los eventos y los objetos de mensaje se utilizan para el registro. Los mensajes de prefijo se emiten cuando se utilizan eventos de prefijo. Los objetos de estilo se utilizan para dar formato a los registros, como agregar color al texto y al fondo, estilo de fuente como negrita, cursiva, subrayado, etc. Algunos paquetes de registro de npm son brolog, npmlogger, npmdate log, etc.

Roarr

Rugido es un registrador para Node.js que no requiere inicialización y produce datos estructurados. Tiene CLI y variables ambientales. Es compatible con el navegador. Puede integrarse con Fastify, Fastify, Elastic Search, etc. Puede distinguir entre código de aplicación y código de dependencia. Cada mensaje de registro consta de un contexto, un mensaje, una secuencia, una hora y una versión. Varios niveles de registro incluyen rastreo, depuración, información, advertencia, error y fatal. Un fragmento de código de muestra sobre cómo se realiza el registro en Roarr es el siguiente:

import {
  ROARR,
} from 'roarr';

ROARR.write = (message) => {
  console.log(JSON.parse(message));
};

Además, se puede realizar la serialización de errores, lo que significa que la instancia con el error se puede registrar junto con el contexto del objeto. Algunas de las variables de entorno que son específicas de Node.js y Roarr son ROARR_LOG y ROARR_STREAM. "adoptar" es una función que se usa con node.js para pasar las propiedades de contexto a varios niveles. Las funciones secundarias también se pueden usar con middleware durante el registro.

Palabras finales

El registro es un método para realizar un seguimiento de varias actividades y eventos durante la ejecución de un programa. El registro juega un papel vital en la depuración de código. También ayuda a aumentar la legibilidad del código. Node.js es un entorno de tiempo de ejecución de javascript de código abierto. Algunos de los mejores registradores de Node.js son Pino, Winston, Bunyan, Signale, Tracer, Npmlog, etc. Cada tipo de registrador tiene sus propias características, como creación de perfiles, filtrado, transmisión y transporte.

Algunos registradores admiten consolas de colores y otros son adecuados para manejar información confidencial. Los registros detallados y formateados ayudan más a los desarrolladores mientras intentan corregir errores en su código. El formato JSON generalmente se prefiere para el registro porque registra datos en forma de pares clave-valor, lo que lo hace fácil de usar.

Los registradores también se pueden integrar con otras aplicaciones y son compatibles con múltiples navegadores. Siempre es recomendable analizar las necesidades y las aplicaciones que está creando antes de elegir el tipo de registrador que desea utilizar.

También puede ver cómo instalar Node.js y NPM en Windows y macOS.