Winston para JavaScript (Node.js): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es Winston y para qué sirve?

\n\n

Winston es una biblioteca potente y flexible para el registro de logs en el entorno Node.js. Fue creada por Charlie Robbins y es una de las bibliotecas más populares para el registro de logs en el ecosistema JavaScript. Winston permite a los desarrolladores registrar mensajes con diferentes niveles de importancia (info, warn, error, debug, etc.), configurar formatos de salida (JSON, texto plano, con marcas de tiempo), así como dirigir los logs a diferentes lugares (consola, archivos, bases de datos, servicios externos).

\n\n

¿Para qué sirve Winston? En cualquier aplicación seria, el registro de logs no es un lujo, sino una necesidad. Ayuda a:

\n
    \n
  • Depurar la aplicación: Los logs permiten entender qué sucedió en el sistema en el momento del error.
  • \n
  • Monitorear el rendimiento: Se puede registrar el tiempo de ejecución de las solicitudes e identificar cuellos de botella.
  • \n
  • Analizar el comportamiento de los usuarios: Los logs ayudan a entender cómo los usuarios interactúan con la aplicación.
  • \n
  • Conservar el historial: Todos los eventos se pueden almacenar en archivos o bases de datos para su posterior análisis.
  • \n
  • Garantizar la seguridad: Los logs pueden registrar acciones sospechosas e intentos de intrusión.
  • \n
\n\n

Winston resuelve estas tareas de manera elegante y eficiente, proporcionando una interfaz unificada para trabajar con logs.

\n\n

Instalación de Winston

\n\n

La instalación de Winston se realiza a través del gestor de paquetes npm. Abra la terminal en la carpeta raíz de su proyecto y ejecute el comando:

\n\n
npm install winston
\n\n

Si usa yarn:

\n\n
yarn add winston
\n\n

Después de la instalación, puede importar Winston a su proyecto:

\n\n
const winston = require('winston');
\n\n

Para proyectos que usan módulos ES (type: "module" en package.json):

\n\n
import winston from 'winston';
\n\n

Inicio rápido con un ejemplo de código

\n\n

Vamos a crear un logger simple que muestre mensajes en la consola y en un archivo:

\n\n
// logger.js\nconst winston = require('winston');\n\n// Creamos un logger con dos transportes: consola y archivo\nconst logger = winston.createLogger({\n    level: 'info', // Nivel mínimo de registro\n    format: winston.format.json(), // Formato de salida — JSON\n    transports: [\n        new winston.transports.Console(), // Salida a consola\n        new winston.transports.File({ filename: 'combined.log' }) // Escritura en archivo\n    ]\n});\n\n// Usamos el logger\nlogger.info('Aplicación iniciada');\nlogger.warn('Advertencia: nivel bajo de memoria');\nlogger.error('Error de conexión a la base de datos');\n\nconsole.log('Logs registrados. Verifique el archivo combined.log');
\n\n

Después de ejecutar este código, verá los logs en la consola y también encontrará el archivo combined.log en la carpeta raíz del proyecto.

\n\n

Métodos y funciones principales de Winston

\n\n

Winston proporciona una API rica. Veamos 10 métodos y funciones clave con ejemplos.

\n\n

1. winston.createLogger(options)

\n

Qué hace: Crea una nueva instancia de logger con la configuración especificada. Es la forma principal de crear un logger.

\n

Parámetros:

\n
    \n
  • options.level (string): Nivel mínimo de registro (por ejemplo, 'info', 'debug', 'error').
  • \n
  • options.format (Format): Formato de salida de los logs (por ejemplo, winston.format.json(), winston.format.simple()).
  • \n
  • options.transports (Transport[]): Array de transportes que determinan hacia dónde dirigir los logs.
  • \n
  • options.defaultMeta (Object): Metadatos que se agregarán a cada mensaje.
  • \n
  • options.exitOnError (boolean): Si es true, el proceso finalizará ante un error de registro (por defecto true).
  • \n
\n

Ejemplo:

\n
const lo                    

Recommendations