11

Contexto:log4j FileAppender no cambia al nuevo archivo cuando logrotate gira el archivo de registro

quiero usar log4j para escribir registros relacionados con la auditoría en un archivo de registro específico, digamos audit.log. No quiero usar syslogappender (basado en udp) porque no quiero ser tolerante a la pérdida de datos. Además, estoy usando logrotate para rotar el audit.log cuando el archivo alcanza cierto tamaño.

Problema:

me encuentro con es que, cuando se hace girar el logrotate audit.log archivo a audit.log.1, log4j sigue escribiendo a audit.log.1 que no sea por escrito a la audit.log .

enfoques posibles:

  1. sé que puedo usar RollingFileAppender para hacer la rotación de registro distinto al uso logrotate, así que cuando RollingFileAppender tira el archivo, se conmutan el nuevo archivo sin molestias. Pero la razón por la que no puedo usar rollingfileappender es porque quiero usar la característica de rotar correos de logrotate para desencadenar algunos guiones después de que ocurre la rotación que no puede ser proporcionada por rollingfileappender.

  2. Otra manera desesperada en la que puedo pensar es escribir log4j un appender personalizado para cerrar el archivo de registro (audit.log.1) y abrir el nuevo (audit.log) cuando detecta que se rota el archivo.

  3. nunca he usado ExternallyRolledFileAppender, pero si es posible utilizar el poste logrotate rotan para enviar la señal a ExternallyRolledFileAppender y crea log4j en cuenta el archivo se gira, y empezar a escribir en el archivo nuevo?

Pregunta:

me preguntaba ¿hay algún appender como que ya ha inventado/escrito? o tengo otras opciones para resolver esto?

+0

manera perfecta de hacer una pregunta 1 – Deepak

Respuesta

5

Salida opción logrotate 's copytruncate, podría ayudar a su caso:

copytruncate 
     Truncate the original log file to zero size in place 
     after creating a copy, instead of moving the old log 
     file and optionally creating a new one. It can be 
     used when some program cannot be told to close its 
     logfile and thus might continue writing (appending) to 
     the previous log file forever. Note that there is a 
     very small time slice between copying the file and 
     truncating it, so some logging data might be lost. 
     When this option is used, the create option will have 
     no effect, as the old log file stays in place 
+0

Por alguna razón, no puedo usar copytruncate en mi caso. Si te explico eso, me tomará media hora escribirlo :) entonces ¿hay alguna otra opción que tenga? – Shengjie

+1

siéntase libre de tomar media hora ... :) @Shengjie – rogerdpack

+1

Tal vez sea el ajuste más cercano, pero no resuelve el problema, ya que se pueden perder registros duplicados. ¿Realmente no hay forma de decirle a una aplicación log4j que vuelva a abrir sus identificadores de archivo de registro? –

Cuestiones relacionadas