2012-07-09 13 views
29

¿Cómo puedo rotar los registros cuando uso Winston para manejar el registro de node.js. Es decir, ¿cómo puedo crear un nuevo archivo para cada día que se ejecuta la aplicación?Winston: cómo rotar los registros

var logger = new (winston.Logger)({ 
     transports: [ 
      new (winston.transports.Console)(), 
      new (winston.transports.File)({ filename: '2012-07-09.log' }) 
     ] 
}); 

logger.log('info', 'Test Log Message', { anything: 'This is metadata' }); 
+1

+1 - ¡buena pregunta! Como una pura suposición, ¿podría escribir su propio registrador de archivos de transporte que tome opciones sobre cómo iniciar sesión (similar a IIS y otros servidores web)? – bryanmac

Respuesta

17

winston Autor y mantenedor aquí.

El registro a un nuevo archivo todos los días es actualmente una solicitud de función abierta: https://github.com/flatiron/winston/issues/10. Me encantaría ver a alguien implementarlo.

Dicho esto, hay otras opciones:

  1. El transporte de archivos acepta una opción maxsize que rotará el archivo de registro cuando se supera un cierto tamaño en bytes.

  2. También hay un sofá-solicitud de apertura con un nuevo transporte no he tenido la oportunidad de excavar realmente en "fileRotate", que al parecer hace este tipo de rotación basado en la fecha: https://github.com/flatiron/winston/pull/120/files

+0

Charlie, muchas gracias! – Sparky1

+0

La solución: https://gist.github.com/suprememoocow/5133080 – DDS

+1

Este transporte se ha agregado a su propio módulo npm ahora: https://github.com/winstonjs/winston-daily-rotate-file –

3

de acuerdo con el autor de winston-filerotatedate que es una: el transporte de archivos

de Winston que permite a los archivos de registro para ser girados en función del tamaño y el tiempo.

El transporte de archivos acepta un nombre de archivo a través de la opción 'nombre de archivo' y utiliza ese archivo como el objetivo principal de registro. En caso de que el archivo crezca más allá de los bytes 'maxsize', se cambia el nombre del archivo de registro actual y se crea un nuevo mosaico de registro principal. El nombre del archivo de registro renombrado está formateado como tal 'basenameYYYYMMDD [a-z] .bak'.

Las opciones disponibles son:

  • nivel: Nivel de mensajes que este transporte debe conectarse.
  • silencioso: Indicador booleano que indica si se debe suprimir la salida.
  • marca de tiempo: Indicador booleano que indica si debemos anteponer la salida con marcas de tiempo (valor predeterminado verdadero). Si se especifica la función, se usará su valor de retorno en lugar de marcas de tiempo.
  • nombre de archivo: El nombre del archivo de registro para escribir la salida.
  • nombredir: La carpeta de archivo de registro se creará en
  • maxsize:. tamaño máximo en bytes del archivo de registro, si se supera el tamaño a continuación, se crea un nuevo archivo.
  • json: Si es verdadero, los mensajes se registrarán como JSON (valor predeterminado).
20

La característica está presente y que están utilizando en la producción, winston.transports.DailyRotateFile:

var timeFormatFn = function() { 
    'use strict'; 
    return moment().format(cfg.timeFormat); 
}; 

var logger = new(winston.Logger)({ 
    exitOnError: false, 
    transports: [ 
     new(winston.transports.DailyRotateFile)({ 
      filename: cfg.appLogName, 
      dirname: __dirname + '/../' + cfg.logsDirectory, 
      datePattern: cfg.rollingDatePattern, 
      timestamp: timeFormatFn 
     }), 
     new(winston.transports.Console)({ 
      colorize: true, 
      timestamp: timeFormatFn 
     }) 
    ] 
}); 
+1

Cambió : https://github.com/winstonjs/winston/blob/d4fdbadc2f4ab8408261497a116ef80e0f9475a0/CHANGELOG.md#user-content-v200--2015-10-29 – lastboy

0

Usted puede utilizar el código siguiente para rotar los archivos de registro diario:

var winston = require('winston'); 
require('winston-daily-rotate-file'); 
var transport = new (winston.transports.DailyRotateFile)({ 
    filename: './log', 
    datePattern: 'yyyy-MM-dd.', 
    prepend: true, 
    level: info 
}); 
var logger = new (winston.Logger)({ 
    transports: [ 
     transport 
    ] 
}); 
logger.info('Hello World!');