Winston: Agregue la capacidad de transporte de archivos para dividir los registros por fecha

Creado en 29 may. 2011  ·  12Comentarios  ·  Fuente: winstonjs/winston

@indexzero -

¿Qué le parecería agregar un parámetro de API opcional al transporte de archivos para que pueda dividir los archivos de registro por fecha? La idea sería que cada nuevo día, se crearía un nuevo archivo de registro y Winston manejaría automáticamente todo esto / sabría en qué archivo de registro escribir en función de la fecha.

feature request

Comentario más útil

No es necesario complicar el código winston cuando existe una herramienta estándar para esta tarea: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

Todos 12 comentarios

Aceptaría la solicitud de parche para esto

¡Frio! ¿Alguna sugerencia para una API? Estaba pensando en algo como:

           // Specify path option and default to spanning by day ( 24 hours in each file )
           new (winston.transports.File)({ path: './logs' })

pero puede ser útil permitir un filtro de fecha / hora personalizado.

No es necesario complicar el código winston cuando existe una herramienta estándar para esta tarea: Logrotate (http://linuxcommand.org/man_pages/logrotate8.html)

@indexzero ¿

no es tarea de demonios individuales cada rotación de registro de implementación. por eso tenemos herramientas como logrotate, como dijo @cemuzunlar .

@cemuzunlar @Dieterbe

Estoy de acuerdo, idealmente, este no sería un problema de Winston, pero

  • winston se ejecuta en Windows, que no tiene logrotate, a pesar de varios intentos simples (de aspecto débil) en varios blogs (y algunas sugerencias para usar cygwin + un logrotate autocompilado, pero dudo que eso sea posible por motivos teóricos, asumiendo que winston mantiene el archivo abierto para escritura, lo que restringe severamente lo que puede hacer con ese archivo en Windows)
  • El transporte de archivos de Winston ya realiza la rotación de registros, solo que se divide por tamaño de archivo, no por fecha. Y también elimina archivos antiguos, por lo que es toda la funcionalidad básica de rotación de registros.

Veo...
pensar en voz alta: mover la lógica de rotación de registros a un programa de nodo separado, por lo que es un clon simple de logrotate reutilizable que funciona en todas las plataformas.

++ 1

Si bien también soy un defensor de logrotate, no hace su trabajo solo. Logrotate es muy útil porque proporciona un método para decirle a los programas que es hora de vaciar y cerrar sus registros.

El transporte de archivos tiene una función _createStream.checkFile.createAndFlush que a primera vista parece que debería hacer las cosas apropiadas. Para usar esto para logrotate, haga que su programa de nodo capture SIGHUP y acceda a esta función. No tengo tiempo antes de mi trabajo diurno para publicar el código, pero intentaré esta noche y publicaré mis resultados.

Responder a SIGHUP de esta manera debería ser transportable a Windows, y luego cualquier rotación de registro que use en Windows (biblioteca de nodos u otra magia) se deja como ejercicio para el lector.

En caso de que alguien más esté buscando esto:

Gracias por el consejo, @pccowboy. También soy un gran defensor de logrotate. Soy reacio a usar una configuración para el servicio node.js (es decir, winston File maxsize, etc.) y otra (logrotate) para otros servicios (nginx, redis, etc.) y preferiría usar logrotate para todos mis archivos de registro. He creado una función simple que escuchará las señales de HUP y volverá a abrir el archivo de registro después de girar.

Si tengo la oportunidad, intentaré reescribir esto de una manera más limpia (es decir, como una opción de configuración para el transporte de archivos) y crearé una solicitud de extracción.

https://gist.github.com/suprememoocow/5133080

Corregido por # 205.

¡increíble!

¿Fue útil esta página
0 / 5 - 0 calificaciones