node.js flatiron.js

node.js - Winston: cómo rotar los registros



flatiron.js (5)

A partir del 18 de diciembre de 2012, esta función ya está disponible en Winston (ver https://github.com/flatiron/winston/pull/205 )

¿Cómo puedo rotar 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?

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'' });


La característica está presente y la estamos utilizando en 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 }) ] });


Puede usar el siguiente código para rotar los archivos de registro diariamente:

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!'');


Según el autor de winston-filerotatedate , es un:

Transporte de archivos para winston que permite rotar los archivos de registro según el tamaño y la hora.

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 cambiará el nombre del archivo de registro actual y se creará un nuevo mosaico de registro principal. El nombre del archivo de registro renombrado se formó como tal ''basenameYYYYMMDD [az] .bak''.

Las opciones disponibles son:

  • nivel: nivel de mensajes que este transporte debe registrar.
  • silent: Indicador booleano que indica si se debe suprimir la salida.
  • timestamp: Indicador booleano que indica si debemos preceder 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 de archivo del archivo de registro para escribir salida.
  • dirname: la carpeta en la que se creará el archivo de registro
  • maxsize: tamaño máximo en bytes del archivo de registro; si se excede el tamaño, se crea un nuevo archivo.
  • json: si es verdadero, los mensajes se registrarán como JSON (valor predeterminado).

winston autor y mantenedor aquí.

El inicio de sesión en un archivo nuevo 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 exceda un cierto tamaño en bytes.

  2. También hay una solicitud de extracción abierta con un nuevo transporte. No he tenido la oportunidad de profundizar realmente en "fileRotate", que parece que tiene este tipo de rotación basada en fechas: https://github.com/flatiron/winston/pull/120/files