sirve que para nodejs node logger node.js bunyan log-rotation

que - Log Rotación en Node.js?



nodejs logger (4)

mongodb

Winston en sí no admite la rotación de registros. Mi error.

mongodb tiene un caso de uso de rotación de registro . Luego, puede exportar los registros a los nombres de archivo según sus requerimientos.

Winston también tiene un transporte mongodb, pero no creo que admita la rotación de registros fuera de la caja a juzgar por su API.

Esto puede ser una exageración sin embargo.

bifurcando bunyan

Puede bifurcar bunyan y agregar la url de su repo en package.json .

Esta es la solución más fácil si está de acuerdo con congelar la función de Bunyan o mantener su propio código.

Como es un proyecto de código abierto, incluso puede agregarle su función y enviar una solicitud de extracción para ayudar a mejorar Bunyan.

En mi analítica web, estoy registrando los datos en un archivo de texto plano. Quiero rotar el registro a diario porque está registrando demasiados datos. Actualmente estoy usando bunyan para rotar los registros.

Problema que estoy enfrentando

Está rotando el archivo correctamente, pero el archivo de registro girado tiene el nombre log.0 , log.1 , etc. Quiero que el nombre del archivo sea log.05-08-2013 , log.04-08-2013

No puedo editar la fuente del paquete bunyan porque estamos instalando los módulos usando package.json través de NPM.

Entonces, mi pregunta es: ¿Hay alguna otra rotación de registro en Node.js que cumpla con mis requisitos?


Existe el módulo logrotator para la rotación de registros que puede utilizar independientemente del mecanismo de registro.

Puede especificar la opción de formato para formatear el formato de fecha (o cualquier otro formato para esa materia)

var logrotate = require(''logrotator''); // use the global rotator var rotator = logrotate.rotator; // or create a new instance // var rotator = logrotate.create(); // check file rotation every 5 minutes, and rotate the file if its size exceeds 10 mb. // keep only 3 rotated files and compress (gzip) them. rotator.register(''/var/log/myfile.log'', { schedule: ''5m'', size: ''10m'', compress: true, count: 3, format: function(index) { var d = new Date(); return d.getDate()+"-"+d.getMonth()+"-"+d.getFullYear(); } });


Si también desea agregar logrotate (por ejemplo, eliminar registros que tengan más de una semana) además de guardar los registros por fecha, puede agregar el siguiente código:

var fs = require(''fs''); var path = require("path"); var CronJob = require(''cron'').CronJob; var _ = require("lodash"); var logger = require("./logger"); var job = new CronJob(''00 00 00 * *'', function(){ // Runs every day // at 00:00:00 AM. fs.readdir(path.join("/var", "log", "ironbeast"), function(err, files){ if(err){ logger.error("error reading log files"); } else{ var currentTime = new Date(); var weekFromNow = currentTime - (new Date().getTime() - (7 * 24 * 60 * 60 * 1000)); _(files).forEach(function(file){ var fileDate = file.split(".")[2]; // get the date from the file name if(fileDate){ fileDate = fileDate.replace(/-/g,"/"); var fileTime = new Date(fileDate); if((currentTime - fileTime) > weekFromNow){ console.log("delete fIle",file); fs.unlink(path.join("/var", "log", "ironbeast", file), function (err) { if (err) { logger.error(err); } logger.info("deleted log file: " + file); }); } } }); } }); }, function () { // This function is executed when the job stops console.log("finished logrotate"); }, true, /* Start the job right now */ ''Asia/Jerusalem'' /* Time zone of this job. */ );

donde mi archivo logger es:

var path = require("path"); var winston = require(''winston''); var logger = new winston.Logger({ transports: [ new winston.transports.DailyRotateFile({ name: ''file#info'', level: ''info'', filename: path.join("/var", "log", "MY-APP-LOGS", "main.log"), datePattern: ''.MM--dd-yyyy'' }), new winston.transports.DailyRotateFile({ name: ''file#error'', level: ''error'', filename: path.join("/var", "log", "MY-APP-LOGS", "error.log"), datePattern: ''.MM--dd-yyyy'', handleExceptions: true }) ]}); module.exports = logger;


Winston admite la rotación de registros utilizando una fecha en el nombre del archivo. Eche un vistazo a esta solicitud de extracción que agrega la función y se fusionó hace cuatro meses. Desafortunadamente, la documentación no se encuentra en el sitio, pero hay otra solicitud de extracción pendiente para solucionarlo. Sobre la base de esa documentación y las pruebas de las funciones de rotación de registros, debería poder agregarlo como un nuevo transporte para habilitar la funcionalidad de rotación de registros. Algo como lo siguiente:

winston.add(winston.transports.DailyRotateFile, { filename: ''./logs/my.log'', datePattern: ''.dd-MM-yyyy'' });