Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

79
Views
Winston inicia sesión en un archivo que comienza con texto personalizado de varias líneas

Nuestro registro de Winston ya está configurado y funciona muy bien usando winston-daily-rotate-file para crear archivos de registro diarios. Lo que ahora debo hacer es crear esos archivos de registro a partir de una plantilla de archivo específica (o cualquier otro método) con algunas filas de encabezado al comienzo del archivo. Queremos cambiar nuestra aplicación para usar un registro más estructurado para usar con una aplicación interna separada para que nuestro equipo de soporte pueda atravesar archivos de registro grandes más fácilmente.

Normalmente, los archivos de registro agregan cada registro al archivo, comenzando con un archivo en blanco. Para especificar, quiero que ese archivo comience con unas pocas líneas de texto antes de agregar cualquier registro.

es posible? No puedo encontrar ninguna referencia a una funcionalidad como esta ni en Winston ni en winston-daily-rotate-file. ¿Quizás estoy destinado a crear un enlace en la secuencia de archivos usando el parámetro de objeto de options ?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Manejar el evento de rotate es el camino a seguir.

En el siguiente código, estoy rotando cada 2 archivos cada minuto con fines de demostración. Estoy agregando texto en la parte superior de cada archivo nuevo, y también en cada rotación. Como la rotación ocurre más tarde, verá ROTATE encima de NEW, que es lo esperado. Para su escenario, no creo que necesite el new evento.

Manifestación

 var winston = require('winston'); require('winston-daily-rotate-file'); const fs = require('fs'); var transport = new winston.transports.DailyRotateFile({ frequency: '1m', filename: 'log-%DATE%', datePattern: 'YYYY-MM-DD-HH-mm', zippedArchive: false, maxSize: '1k', maxFiles: '2', extension: 'log' }); transport.on('rotate', function (oldFilename, newFilename) { console.log("rotate"); var data = fs.readFileSync(newFilename); //read existing contents into data var fd = fs.openSync(newFilename, 'w+'); var buffer = Buffer.from('ROTATE text inserted on top \n'); fs.writeSync(fd, buffer, 0, buffer.length, 0); //write new data fs.writeSync(fd, data, 0, data.length, buffer.length); //append old data fs.close(fd); }); transport.on('new', function (newFilename) { console.log("new"); var data = fs.readFileSync(newFilename); //read existing contents into data var fd = fs.openSync(newFilename, 'w+'); var buffer = Buffer.from('NEW text inserted on top \n'); fs.writeSync(fd, buffer, 0, buffer.length, 0); //write new data fs.writeSync(fd, data, 0, data.length, buffer.length); //append old data fs.close(fd); }); var logger = winston.createLogger({ transports: [ transport ] }); async function demo() { for (i = 1; i < 20; i++) { logger.info('Hello World ' + i); console.log(i); await new Promise(r => setTimeout(r, 10000)); } } demo();

Salida de consola

 1 2 3 new rotate 4 5 6 7 8 9 new rotate 10 11 12 13 14 15 new rotate 16 17 18 19

Archivos creados

 log-2022-06-13-14-36log log-2022-06-13-14-37log

Contenido de archivos

1:

 ROTATE text inserted on top NEW text inserted on top {"level":"info","message":"Hello World 10"} {"level":"info","message":"Hello World 11"} {"level":"info","message":"Hello World 12"} {"level":"info","message":"Hello World 13"} {"level":"info","message":"Hello World 14"} {"level":"info","message":"Hello World 15"}

2:

 ROTATE text inserted on top NEW text inserted on top {"level":"info","message":"Hello World 16"} {"level":"info","message":"Hello World 17"} {"level":"info","message":"Hello World 18"} {"level":"info","message":"Hello World 19"}
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!