Winston es una biblioteca de registro (logging) para Node.js que permite capturar, almacenar y gestionar mensajes de log de forma flexible. Soporta múltiples niveles de log, transporte de mensajes a diferentes destinos (archivos, consola, etc.) y es extensible mediante plugins.
Para utilizar Winston en tu proyecto, primero debes instalarlo:
npm install winston
Winston permite definir diferentes niveles de log y transportes, que son los medios donde los logs se almacenarán o mostrarán. Un ejemplo común es registrar los mensajes en la consola y en archivos de log.
Aquí un ejemplo básico:
const winston = require('winston');
// Configuración del logger
const logger = winston.createLogger({
level: 'info', // Nivel de log mínimo ('error', 'warn', 'info', 'http', 'verbose', 'debug', 'silly')
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.Console(), // Mostrar logs en consola
new winston.transports.File({ filename: 'logs/app.log' }) // Guardar logs en un archivo
]
});
// Uso del logger
logger.info('Este es un mensaje informativo');
logger.error('Este es un mensaje de error');
Winston soporta varios niveles predefinidos, desde mensajes críticos hasta información de depuración detallada. Los niveles comunes son:
error
: Errores críticos.
warn
: Advertencias.
info
: Información general del estado del sistema.
debug
: Información detallada para debugging.
logger.warn('Este es un mensaje de advertencia');
logger.debug('Este es un mensaje de depuración');
Puedes configurar Winston para enviar logs a múltiples destinos, como archivos separados para diferentes niveles:
const logger = winston.createLogger({
level: 'info',
format: winston.format.simple(),
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' }),
]
});
Winston permite personalizar el formato de los logs usando winston.format
. Por ejemplo, para mostrar los logs en formato simple en la consola y en formato JSON en los archivos:
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.prettyPrint() // Formato legible
),
transports: [
new winston.transports.Console({
format: winston.format.simple()
}),
new winston.transports.File({ filename: 'logs/app.log' })
]
});
Para más detalles sobre las capacidades avanzadas de Winston, puedes consultar la documentación oficial de Winston.
Jorge García
Fullstack developer