Este blog discutirá el valor de utilizar bibliotecas de registro y analizará las 10 herramientas de registro mejor revisadas que hemos encontrado para Node.js. En @playerzero usamos las bibliotecas de registro de node.js a menudo para crear y administrar eventos de registro. Obtenga más información sobre cómo estamos implementando nuestro enfoque único para monitorear lo que importa tanto para las aplicaciones frontales como para las internas hoy https://www.playerzero.app/
pino
Winston
Bunyán
morgan
Nivel de registro
log4js
Npmlog
Rugido
Trazador
señal
Desde una perspectiva de alto nivel, el registro de Node.js es importante porque ayuda a los desarrolladores a realizar un seguimiento de los eventos y el rendimiento de su aplicación, diagnosticar y corregir problemas, monitorear el comportamiento del sistema y tomar decisiones informadas. El registro proporciona un registro de la actividad de una aplicación, lo que permite a los desarrolladores identificar y depurar problemas, comprender el comportamiento del usuario y mejorar el rendimiento general y la estabilidad del sistema. El registro también puede ser útil en entornos de producción para detectar y corregir errores, monitorear el rendimiento del sistema y detectar incidentes de seguridad.
Cada vez que algo sale muy mal en una aplicación, los desarrolladores tienen la opción de rastrear su origen a través de un seguimiento de pila. Pero... confiar solo en los rastros de la pila solo pinta la mitad de la imagen. El seguimiento le proporcionará información sobre la ejecución de una aplicación, incluido el flujo de solicitudes, las consultas de la base de datos, las llamadas API externas y las métricas de rendimiento, que pueden ser muy útiles. En general, los seguimientos se utilizan para comprender el comportamiento de una aplicación a nivel granular y para identificar cuellos de botella en el rendimiento.
El registro llena la otra mitad de la imagen. El registro es el proceso de registrar mensajes y eventos relacionados con una aplicación, como errores, advertencias, métricas de rendimiento e información de depuración. El inicio de sesión en Node.js se usa para diagnosticar problemas, comprender el comportamiento del usuario y mejorar el rendimiento general y la estabilidad de una aplicación. También proporciona un registro de la actividad en una aplicación, lo que permite a los desarrolladores identificar y depurar problemas y tomar decisiones más informadas.
Hay varias razones por las que debería usar las bibliotecas de registro de Node.js:
Los niveles de registro son una forma de categorizar la importancia o la gravedad de los mensajes de registro. Por lo general, hay varios niveles, que van desde errores críticos hasta mensajes informativos, y cada nivel está asociado con un valor numérico que se puede usar para filtrar mensajes de registro en una biblioteca. Estos son los niveles más comunes:
Nivel de registro FATAL
Quizás, como era de esperar, el nivel de registro FATAL
es un nivel de gravedad que indica un error crítico en una aplicación, lo que significa que los registros con un nivel FATAL
indican que la aplicación no puede continuar ejecutándose normalmente sin la intervención del desarrollador.
Nivel de registro ERROR
El nivel de registro ERROR
indica que una aplicación es actualmente capaz de ejecutarse, PERO, está encontrando un problema. Por lo general, esto indica que una tarea requerida en la aplicación falló, que hubo una excepción, un comportamiento inesperado o entradas incorrectas.
Nivel de registro WARN
WARN
es un nivel de registro menos grave que ERROR
, pero, sin embargo, no debe ignorarse. Los registros WARN
se pueden usar para identificar problemas de manera proactiva y evitar que se agraven, ya que indican que algo en su aplicación podría convertirse en un catalizador para un problema más importante.
nivel de registro INFO
El nivel de registro INFO
es un tipo de mensaje de registro utilizado en los sistemas de registro para indicar un mensaje informativo general. Por lo general, se usa para registrar eventos esperados de rutina en la aplicación o el sistema, como el inicio de un proceso, la finalización de una tarea o un cambio en el estado del sistema. Estas alertas generalmente se pueden ignorar, ya que están destinadas a confirmar que una aplicación funciona correctamente.
Nivel de registro DEBUG
Normalmente, el nivel de registro DEBUG
proporciona información que es estrictamente útil dentro del proceso de depuración. Los registros DEBUG
son el tipo de mensaje de registro más detallado y proporcionan una vista granular del funcionamiento interno de una aplicación. El objetivo principal de los registros DEBUG
es ayudar a los desarrolladores a comprender qué está haciendo el sistema, identificar errores y problemas, y diagnosticar problemas.
Pino es una herramienta de registro muy popular y establecida desde hace mucho tiempo, con más de 10.9K estrellas Github y millones de descargas en npm. Pino es una biblioteca de registro popular para Node.js porque proporciona varias funciones clave que la hacen adecuada para su uso en aplicaciones de Node.js:
Rápido : Pino está diseñado para ser rápido y liviano, con un enfoque en el rendimiento. Utiliza un formato binario para los mensajes de registro, lo que le permite generar resultados de registro de forma rápida y eficiente.
Registros estructurados : Pino registra mensajes en formato JSON, lo que permite analizar, filtrar y analizar fácilmente los datos de registro. Esto facilita la búsqueda, la visualización y el análisis de datos de registro y la integración de datos de registro en otros sistemas.
Fácil de extender : Pino está diseñado para ser altamente extensible e incluye una serie de complementos integrados que se pueden usar para agregar funciones adicionales, como escribir datos de registro en un archivo o enviar datos de registro a un servidor remoto.
Gastos generales bajos : Pino es una biblioteca de registro de Node.js altamente eficiente debido a su utilización mínima de recursos. El proceso de registro con Pino acumula mensajes gradualmente, lo que provoca una aceleración de la aplicación y una disminución en la cantidad de solicitudes por segundo. La limitación es una técnica en la que la función conectada a un evento se activa para ejecutarse solo una vez dentro de un período de tiempo específico, incluso si el evento se activa varias veces.
Transportes : Pino ofrece una variedad de opciones para enviar registros, incluida la escritura en archivos, la visualización en la consola y el uso de plataformas como Sentry, Azure Application Insights y CouchDB.
Para usar Pino en una aplicación Node.js, siga estos pasos:
Para instalar Pino, simplemente instálelo ejecutando el siguiente comando en un nuevo directorio:
npm install pino
Importar : en su aplicación Node.js, importe Pino agregando la siguiente línea de código en la parte superior de su archivo:
const pino = require('pino');
Inicialización : inicialice Pino creando una instancia de registrador, por ejemplo:
const logger = pino({ level: 'info' });
Este script produce registros con un nivel de registro de INFO
y superior en la consola.
Al establecer el nivel en info, Pino registrará mensajes con un nivel de registro de INFO
, WARN
, ERROR
y FATAL
. Los mensajes con un nivel de registro inferior INFO
, como DEBUG
, no se registrarán.
Este código solo crea una instancia de registrador de Pino con el nivel de registro establecido en INFO. No se generan ni se muestran mensajes de registro hasta que registre algo utilizando la instancia del registrador. Por ejemplo:
logger.info('This is an info message');
Esto produciría el siguiente resultado en la consola:
{"level":30,"time":1624825088703,"msg":"This is an info message","pid":1234,"hostname":"my-machine"}
Los datos registrados que se muestran en la consola incluyen el nivel de registro, la marca de tiempo cuando se registró, el mensaje que se registra, un identificador para el registro y el nombre de host.
Registro : también puede usar la instancia logger
para registrar otros mensajes en su aplicación. Por ejemplo:
logger.warn('This is a warning message'); logger.error('This is an error message');
Salida : de forma predeterminada, Pino inicia sesión en la consola. Si desea cambiar la salida, puede usar uno de los transportes disponibles de Pino que mencionamos anteriormente, como escribir en un archivo, enviar registros a un servicio remoto como Sentry o usar Azure Application Insights. Para obtener más información, puede consultar la sección "Transportes conocidos" de Pino.
La función de formateador NDJSON pino-pretty
básica de Pino es un gran formateador simple para los registros de Pino, y es fácil de configurar. A continuación se explica cómo ponerlo en funcionamiento:
Paso 1 : instale pino-pretty como una dependencia en su proyecto Node.js ejecutando el siguiente comando en su terminal:
npm install pino-pretty
Paso 2 : importe pino-pretty
en su aplicación Node.js agregando la siguiente línea de código en la parte superior de su archivo:
const pino = require('pino'); const pinoPretty = require('pino-pretty'); const logger = pino({ level: 'info' }); logger.pipe(pinoPretty());
Con estos dos fragmentos de código, instaló pino-pretty
y lo configuró para formatear sus registros de Pino. Ahora puede usar la instancia del registrador para registrar mensajes en su aplicación y los registros se mostrarán en un bonito formato legible por humanos en la consola.
Aprenda aún más sobre la depuración con Pino en Cómo depurar Node.js con las mejores herramientas disponibles por @RisingStack
Con más de 20 000 estrellas en GitHub, Winston es una biblioteca de registro muy popular para Node.js. Winston es una biblioteca de registro única en el ecosistema de Node.js debido a su completo conjunto de funciones y su facilidad de uso. Algunas de las razones por las que Winston se destaca son:
Para instalar Winston en su proyecto Node.js, puede usar el administrador de paquetes npm ejecutando el siguiente comando en su terminal:
npm install winston
Una vez que se completa la instalación, puede importar y usar Winston en su código Node.js al incluir la siguiente línea:
const winston = require('winston');
Luego puede usar la biblioteca de Winston para configurar y crear sus instancias de registro, por ejemplo:
const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console() ] });
Esto crea una instancia de registrador con un nivel de información y un transporte de consola. Puede usar esta instancia de registrador para registrar mensajes en su aplicación, por ejemplo:
logger.info('Hello World');
Esto registrará el mensaje Hello World
en la consola con el nivel de registro de información.
Winston está equipado con seis niveles de registro predeterminados, organizados de acuerdo con las pautas descritas en el documento RFC5424. A los niveles se les asigna una prioridad numérica, asignándose el número más bajo a la gravedad más alta. Los seis niveles y sus respectivos valores de prioridad son:
{ error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }
Para cada uno de los seis niveles de registro, hay un método correspondiente en el objeto registrador:
logger.error('error'); logger.warn('warn'); logger.info('info'); logger.verbose('verbose'); logger.debug('debug'); logger.silly('silly');
También puede pasar una cadena que represente el nivel de registro al método log():
logger.log('error', 'error message'); logger.log('info', 'info message');
La propiedad level
en el logger
dicta qué mensajes de registro se pasarán a los transportes que ha configurado. Por ejemplo, si la propiedad level
se establece en info
, solo se escribirán las entradas de registro con una gravedad de info
o superior y todas las demás perderán prioridad. Esto significa que en la configuración actual, solo se generarán mensajes de registro con niveles de info
, warn
y error
.
Bunyan es una biblioteca de registro única para Node.js debido a su enfoque en hacer que los datos de registro sean más estructurados y legibles (lo logran al serializar registros como objetos JSON en lugar de texto sin formato). He aquí por qué Bunyan tiene 7k estrellas en Github:
Para instalar Bunyan, puede ejecutar el siguiente comando en su terminal o símbolo del sistema:
npm install bunyan
Esto instalará la biblioteca Bunyan y sus dependencias en su proyecto Node.js. Una vez instalada, puede requerir la biblioteca en su código y comenzar a usarla.
Importe Bunyan en su proyecto : en la parte superior de su archivo JavaScript, agregue la siguiente línea:
const bunyan = require('bunyan');
Cree una instancia de registrador : a continuación, cree una instancia de registrador utilizando el siguiente código:
const logger = bunyan.createLogger({ name: 'my-app-name', level: 'info' });
En este ejemplo, name
es el nombre de su aplicación y nivel especifica el nivel mínimo de registros que desea ver.
Registrar un mensaje : para registrar un mensaje, simplemente llame a uno de los métodos de registro de Bunyan, como información, advertencia o error, y pase el mensaje que desea registrar, así:
logger.info('This is an info log message'); logger.warn('This is a warn log message'); logger.error('This is an error log message');
Ejecute su código : finalmente, ejecute su código y debería ver los mensajes registrados en la consola.
De manera predeterminada, Bunyan genera registros en formato JSON, lo que facilita la interpretación y el análisis de registros con herramientas de administración de registros. También puede personalizar el formato usando la opción de transmisiones de Bunyan.
Morgan es una biblioteca de registro única para Node.js por varias razones, principalmente su posicionamiento único como middleware. Esto, entre otras razones, lo ha llevado a ser muy popular, con 7.300 estrellas en GitHub en el momento de escribir este artículo. Aquí hay algunas razones por las que Morgan es tan popular:
Comience instalando el paquete morgan usando npm:
npm install morgan
Después de completar el proceso de instalación, debe importar la biblioteca mediante la función "requerir" y luego integrarla en su aplicación Express.js como middleware.
El código para esto se vería así:
var morgan = require('morgan'); app.use(morgan('dev'));
El argumento "dev" es una opción de formato proporcionada por Morgan. Morgan ofrece cinco formatos de registro diferentes, que incluyen:
tiny
tiene una salida minúscula.short
incluye el tiempo de respuesta y abrevia el registro de forma predeterminada.dev
proporciona una salida concisa codificada por colores para su uso durante el desarrollocommon
también utiliza la salida de registro combinada de Apache.combined
utiliza la salida de registro combinada estandarizada de Apache.
Puede elegir entre estos formatos usando el argumento apropiado al integrar Morgan en su aplicación, como se muestra a continuación:
app.use(morgan('combined')); app.use(morgan('common')); app.use(morgan('dev')); app.use(morgan('short')); app.use(morgan('tiny'));
Loglevel es un poco menos popular que algunas de las otras opciones enumeradas aquí, con 2.400 estrellas en Github, pero sigue siendo una biblioteca de registro excelente y liviana. Aquí hay algunas razones por las que loglevel es una biblioteca de registro única para Node.js:
Para configurar el nivel de registro, primero debe instalarlo usando npm:
npm install loglevel
Una vez que lo tenga instalado, puede importarlo en su proyecto Node.js y comenzar a usarlo configurando el nivel de registro:
const log = require('loglevel'); log.setLevel(log.levels.ERROR);
Al establecer el nivel de registro en ERROR,
está especificando que solo se registrarán los mensajes de registro con un nivel de gravedad de ERROR
. Después de configurar el nivel de registro, puede usar los siguientes métodos para registrar mensajes en diferentes niveles:
log.trace('This is a trace message'); log.debug('This is a debug message'); log.info('This is an info message'); log.warn('This is a warning message'); log.error('This is an error message');
El nivel de registro que establezca determinará qué mensajes se registrarán y cuáles se ignorarán. Por ejemplo, si el nivel de registro se establece en información, solo se mostrarán los mensajes registrados mediante log.info y log.warn o log.error.
Por supuesto, no podríamos mencionar loglevel sin mencionar también a su hermano mayor, Log4js. Log4js es una biblioteca de registro de JavaScript que se inició como un puerto de la popular biblioteca de registro de Java Log4j. Fue creado para proporcionar una solución de registro similar para aplicaciones de JavaScript y desde entonces ha evolucionado para proporcionar funciones y capacidades de registro avanzadas. Con más de 5600 estrellas en Github, estas son algunas de las razones por las que Log4js es tan popular:
Para instalar Log4js, puede usar el administrador de paquetes npm ejecutando el siguiente comando en su terminal:
npm install log4js
Esto instalará la última versión de Log4js y sus dependencias. Luego puede requerir la biblioteca en su aplicación Node.js y comenzar a usarla para registrar mensajes.
Para comenzar a usar Log4js, primero solicítelo en su código y configúrelo:
const log4js = require('log4js'); log4js.configure({ appenders: { console: { type: 'console' } }, categories: { default: { appenders: ['console'], level: 'info' } } }); const logger = log4js.getLogger();
Luego puede usar el registrador para registrar mensajes en diferentes niveles:
logger.trace('Entering cheese testing'); logger.debug('Got cheese.'); logger.info('Cheese is Gouda.'); logger.warn('Cheese is quite smelly.'); logger.error('Cheese is too ripe!'); logger.fatal('Cheese was breeding ground for listeria.');
Aquí hay un ejemplo del uso de Log4js para registrar mensajes en múltiples agregadores (consola y archivo) con diferentes niveles de registro:
const log4js = require('log4js'); log4js.configure({ appenders: { console: { type: 'console' }, file: { type: 'file', filename: 'app.log' } }, categories: { default: { appenders: ['console'], level: 'info' }, file: { appenders: ['file'], level: 'error' } } }); const logger = log4js.getLogger(); const fileLogger = log4js.getLogger('file'); logger.info('This is an informational message'); fileLogger.error('This is an error message');
En este ejemplo, el registrador con la categoría "predeterminada" está configurado para registrar mensajes con información de nivel o superior en la consola. El registrador con la categoría "archivo" está configurado para registrar mensajes con nivel de error o superior en el archivo. Los dos registradores se pueden usar indistintamente para registrar mensajes en sus respectivos anexadores.
El valor único de npmlog radica en su simplicidad y mínima sobrecarga, lo que lo hace ideal para su uso en proyectos de pequeña escala o sensibles al rendimiento. Es fácil de configurar y se integra a la perfección con el ecosistema npm (lo que no sorprende dado que es la utilidad de registro oficial de npm), lo que lo convierte en una opción popular para los desarrolladores que buscan una solución de registro liviana. Aquí hay algunas razones por las que npmlog está en la lista:
Para instalar npmlog, debe tener Node.js y npm (Node Package Manager) instalados en su máquina. Luego, puede ejecutar el siguiente comando en su terminal o símbolo del sistema:
npm install npmlog
Esto descargará e instalará la última versión de npmlog y sus dependencias, permitiéndole usarla en su proyecto Node.js.
Aquí hay un ejemplo de cómo usar npmlog en un proyecto de Node.js:
const log = require('npmlog'); log.level = 'verbose'; log.verbose('This is a verbose message'); log.info('This is an informational message'); log.warn('This is a warning'); log.error('This is an error');
En este ejemplo, comenzamos solicitando el módulo npmlog
y asignándolo a una variable. Luego, establecemos el nivel de registro en verbose
, lo que significa que se mostrarán los mensajes con un nivel de registro de verbose
, info
, warn
y error
. Luego, registramos mensajes en diferentes niveles usando los métodos verbose
, info
, warn
y error
.
Tenga en cuenta que, de forma predeterminada, npmlog escribe en process.stderr
. Si necesita escribir en process.stdout
, puede usar la propiedad log.stream
.
La biblioteca roarr es una herramienta de registro de Node.js que está diseñada para producir datos estructurados sin necesidad de inicialización. Cuenta con una interfaz de línea de comandos (CLI) y admite variables ambientales, lo que lo hace versátil y fácil de usar. Además, roarr es compatible con entornos de navegador y Node.js, lo que lo convierte en una solución de registro versátil para una amplia gama de aplicaciones.
Aquí hay algunos puntos clave que resaltan el valor único de la biblioteca roarr:
Primero, instale roarr usando npm:
npm install roarr
A continuación, importe roarr en su código y cree un registrador:
const Roarr = require('roarr').default; const logger = new Roarr({ context: { service: 'my-service' } });
Registre mensajes utilizando el método log
:
logger.info('Hello, world!');
De forma predeterminada, los registros de roarr se enviarán a la consola. Puede personalizar la salida del registro especificando una secuencia diferente, como un archivo, usando la opción stream
:
const Roarr = require('roarr').default; const fs = require('fs'); const logger = new Roarr({ context: { service: 'my-service' }, stream: fs.createWriteStream('./my-service.log') });
Este es solo un ejemplo básico de cómo usar roarr. Hay muchas más opciones y funciones disponibles, así que asegúrese de consultar la documentación oficial de roarr para obtener más información.
Tracer es una biblioteca de registro de código abierto para aplicaciones de Node.js, desarrollada por la comunidad de Node.js. Está diseñado para proporcionar una forma eficiente y flexible de registrar mensajes e información de depuración en aplicaciones Node.js. Tracer ha sido mantenido y desarrollado activamente por un equipo de voluntarios y está disponible para que cualquiera lo use y contribuya en Github. Estas son algunas de las características que la convierten en una biblioteca de registro única:
Tracer se puede instalar mediante el administrador de paquetes de nodos (npm). Estos son los pasos para instalar Tracer:
npm install tracer
Esto instalará Tracer como una dependencia en su proyecto. Luego puede solicitarlo en su código y comenzar a usarlo para registrar mensajes.
Aquí hay un ejemplo de cómo usar Tracer en su código:
const tracer = require('tracer'); const logger = tracer.console(); logger.info('Starting the application...');
En este ejemplo, primero necesitamos la biblioteca Tracer, luego creamos un registrador de consola usando el método tracer.console()
. Finalmente, registramos un mensaje informativo usando el método info
en el objeto registrador.
Aquí hay otro ejemplo del uso de Tracer:
const tracer = require('tracer'); const logger = tracer.dailyfile({root: './logs', maxLogFiles: 10}); logger.error('An error has occurred:', new Error('Something went wrong'));
En este ejemplo, usamos el método tracer.dailyfile
para crear un registrador de archivos que escribe registros en un archivo rotativo diario. La opción root
especifica el directorio donde se almacenarán los archivos de registro y la opción maxLogFiles
limita la cantidad de archivos de registro que se guardarán.
Finalmente, registramos un mensaje de error usando el método error
en el objeto registrador, junto con un objeto de error, brindando más información sobre el error que ocurrió.
Su página de Github se jacta de ser "hackeable y configurable hasta el núcleo", y eso es una parte importante de lo que hace de Signale una biblioteca de registro tan querida en la comunidad de Node.js. La biblioteca se creó como una solución para las dificultades que enfrentan los desarrolladores cuando intentan registrar mensajes en aplicaciones Node.js, como registros desordenados y difíciles de leer. Esto es lo que lo hace destacar del resto:
Para instalar Signale, puede usar npm, el administrador de paquetes de Node.js, ejecutando el siguiente comando en su terminal:
npm install signale
Alternativamente, también puede usar yarn para instalar Signale ejecutando el siguiente comando en su terminal:
yarn add signale
Una vez instalado, puede importar Signale a su aplicación Node.js y comenzar a usarlo para registrar mensajes e información de depuración.
Aquí hay un ejemplo de cómo importar Signale a su aplicación Node.js y usarlo para registrar mensajes:
const signale = require('signale'); // Log an info message signale.info('Starting up the server'); // Log a success message signale.success('Server started successfully'); // Log a warning message signale.warn('Low memory warning'); // Log an error message signale.error(new Error('An error occurred while processing data'));
En este ejemplo, importamos Signale a nuestra aplicación Node.js usando la función require
. Luego, usamos los diversos métodos de registro proporcionados por Signale, como info
, success
, warn
y error
, para registrar diferentes tipos de mensajes. Cada uno de estos métodos tiene un símbolo y un color distintivos, lo que facilita la identificación rápida del tipo de mensaje de registro.
Puede encontrar más información sobre cómo usar Signale, incluidos métodos de registro adicionales y opciones de personalización, en la documentación de Signale .
¿Está buscando un método rápido y eficiente para depurar sus aplicaciones Node.js? Consulte una o más de las bibliotecas mencionadas en este artículo, cada una de ellas es una excelente opción. Pino, sin embargo, es nuestra biblioteca de registro personal preferida por lo que vale 😉
Estas bibliotecas de registro han demostrado ser cruciales al depurar aplicaciones Node.js tanto en entornos de prueba/desarrollo como en producción.
Además, al integrarlos con una solución de monitoreo como PlayerZero, puede obtener aún más información sobre el rendimiento de sus aplicaciones Node.js.
También publicado aquí .