Volver a la página principal
jueves 26 diciembre 2024
14

Cómo rotar logs de manera diaria con Winston en Node.js

Winston permite la rotación de logs mediante el paquete adicional winston-daily-rotate-file. Este módulo facilita la creación de nuevos archivos de log basados en una frecuencia definida (diaria, semanal, etc.).

Pasos para implementar rotación diaria de logs

1. Instalación de dependencias:

Asegúrate de tener Winston y winston-daily-rotate-file instalados en tu proyecto:

npm install winston winston-daily-rotate-file

2. Configuración del logger con rotación diaria:

Configura un transportador (transport) de winston-daily-rotate-file para manejar los logs.

const winston = require('winston');
   const DailyRotateFile = require('winston-daily-rotate-file');

   // Configuración del logger
   const logger = winston.createLogger({
       level: 'info', // Nivel mínimo de log a registrar
       format: winston.format.combine(
           winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
           winston.format.printf(info => `${info.timestamp} [${info.level.toUpperCase()}]: ${info.message}`)
       ),
       transports: [
           new DailyRotateFile({
               filename: 'logs/application-%DATE%.log',
               datePattern: 'YYYY-MM-DD',
               maxSize: '20m', // Tamaño máximo del archivo de log
               maxFiles: '14d', // Mantener archivos por 14 días
           })
       ]
   });

   // Ejemplo de uso
   logger.info('Este es un mensaje de log informativo.');
   logger.error('Este es un mensaje de log de error.');

3. Parámetros importantes de configuración:

  • filename: Ruta y formato del nombre del archivo, donde %DATE% se reemplaza con la fecha.
  • datePattern: Define el patrón de fecha utilizado en los nombres de archivo.
  • maxSize: Especifica el tamaño máximo de cada archivo antes de crear uno nuevo.
  • maxFiles: Determina cuántos archivos antiguos conservar antes de eliminarlos.

Ejemplos adicionales

Registro con múltiples transportadores:

Puedes combinar la rotación diaria con otros transportadores, como la consola:

logger.add(new winston.transports.Console({
    format: winston.format.simple(),
}));

Integración con diferentes niveles de log:

Para manejar diferentes niveles (e.g., info, error) en archivos separados:

logger.add(new DailyRotateFile({
    filename: 'logs/error-%DATE%.log',
    level: 'error',
    datePattern: 'YYYY-MM-DD',
}));

Referencia oficial

Consulta la documentación de winston-daily-rotate-file para más detalles y configuraciones avanzadas.

Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer