2009-02-08 15 views
10

Por lo que puedo decir, ni Log4Perl ni ninguno de sus módulos relacionados en CPAN admite rotar & compresión de archivos de registro.¿Cómo puedo rotar y comprimir los archivos de registro de Log4perl?

rotación puede llevarse a cabo mediante el uso de:

  1. Log::Log4perl::Appender::File
  2. Log::Dispatch::FileRotate.

Pero ni los módulos soporta la rotación y compresión. (Log :: Dispatch :: FileRotate lo tiene en su lista de tareas pendientes, pero actualmente no está implementado).

Es posible hacer esto usando la instalación estándar Logrotate en Linux, usando Log :: Log4perl :: Appender :: File recreate_check_interval o recreate_check_signal.

De las pruebas iniciales, parece que usar Logrotate con la opción delaycompress hará el truco - incluso en una máquina con alta carga, ya que una vez que se mueve el archivo, log4perl continuará registrando en el mismo identificador de archivo, hasta que la señal cought.

Sin embargo, si no se utiliza delaycompress, y hay (incluso un ligero retraso) entre la compresión del archivo de registro y la captura de la señal por el programa Perl, algunos datos de registro pueden perderse.

¿Qué opinas? ¿Hay otras opciones en las que no pensamos?

+0

No respondiendo directamente a las preguntas, pero hay muchos buenos ejemplos de las configuraciones de log4perl aquí que direccionan los archivos de registro giratorios, etc. http://www.netlinxinc.com/netlinx-blog/52-perl/126-eight-loglog4perl-recipes. html –

+0

... y algunas buenas recetas aquí http://log4perl.sourceforge.net/releases/Log-Log4perl/docs/html/Log/Log4perl/FAQ.html –

Respuesta

3

¿Ha pensado en trabajar con los encargados de Log :: Dispatch :: FileRotate para agregar las características que falta y necesita? Es de código abierto, después de todo. :)

Si no quiere tratar con eso usted mismo, hay varias consultorías de soporte de CPAN que lo hacen por usted.

+0

+1 en Log :: Despacho Log :: Dispatch :: Config es básicamente una versión correcta de Log4Perl. Usted básicamente obtiene la unión del conjunto de características L :: D y L4P, que suena como lo que quiere aquí. – jrockway

3

Me puse en contacto con el autor de Log :: Dispatch :: FileRotate, como se sugiere aquí, y me explicó el motivo por el que la compresión aún no se implementa en Log :: Dispatch :: FileRotate.

Básicamente, la compresión justo después de la rotación, puede bloquear el proceso de ejecución, durante la compresión, que es bastante caro.

Las opciones sugeridas fueron para permitir al usuario de Log :: Dispatch :: FileRotate ejecutar una aplicación arbitraria en el archivo, justo después de la rotación, y así hacerlo en otro proceso que no sea de bloqueo.

Otra sugerencia fue tener un disparador del sistema de archivos (como inotify) desencadenar la compresión cuando el proceso principal cierra el archivo para que se escriba.

Otra sugerencia más, es escribir el archivo de registro comprimido a través de una tubería gzip, o uno de los módulos perl gzip. Esto funciona, pero causa algunos problemas (grep/less) no funcionará. zgrep y zless funcionarán, pero zgrep da una fea advertencia cuando grepping en un archivo gzip que aún está abierto para escritura. Usar "cola" en el archivo tampoco funcionará, por lo que esta opción no es práctica.

5

A lo largo de los años, he descubierto que casi siempre desea utilizar métodos externos para la rotación de archivos de registro con Log4perl. Simplemente evitas muchos problemas sutiles (retrasos en el registro, problemas de permisos) que el registro interno gira inevitablemente.

Has mencionado dos métodos que funcionan con logrotate en Linux, ¿por qué no te apegas a ellos? El Log4perl FAQ describes using newsyslog que es el equivalente de FreeBSD de logrotate y proporciona características similares.

Cuestiones relacionadas