cambiar el archivo de propiedades log4j en tiempo de ejecución porque se crea un registro predeterminado vacío

Tengo una aplicación que usa log4j para iniciar sesión en un archivo de texto, he colocado un archivo log4j.properties dentro de mi archivo jar ejecutable que contiene los parámetros de configuración de registro predeterminados.

Mi archivo log4j.properties tiene el siguiente aspecto:

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=mylogfile.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n

Mi aplicación también tiene una opción de línea de comando que permite al usuario cambiar el nombre del archivo de registro, así que tengo una función como la siguiente que cambia la configuración de log4j en tiempo de ejecución:

public void changeLogFileName(String filename) {    
          props.setProperty("log4j.appender.A1","org.apache.log4j.DailyRollingFileAppender");
          props.setProperty("log4j.appender.A1.DatePattern","'-'ddMMyyyy");
          props.setProperty("log4j.appender.A1.File",filename);
          LogManager.resetConfiguration();
          PropertyConfigurator.configure(props);
    }

Todo funciona bien, a menos que cuando la declaración LogManager.resetConfiguration () y/o PropertyConfigurator.configure (accesorios) se ejecutan un archivo de registro vacío predeterminado (mylogfile.log) se crea automáticamente. Después de eso, todo lo que inicie sesión desde mi aplicación se escribirá correctamente en el nuevo archivo, pero de todos modos se creará un archivo vacío (con el nombre del archivo de registro predeterminado en log4j.properties).

¿Hay alguna forma de evitar la creación del archivo de registro predeterminado vacío?

preguntado el 08 de noviembre de 11 a las 16:11

1 Respuestas

Finalmente he desarrollado log4j-adiciones biblioteca que permite la creación de un appender de inicialización Lazy que evita la creación del archivo de registro vacío.

log4.properties

#Lazy File Appender
log4j.appender.A1=org.pollerosoftware.log4j.additions.appenders.LazyFileAppender
log4j.appender.A1.File=juakaritoglory.log
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] - %m%n

Método para cambiar el camino

/**
 * Change the path of log file
 * @param path new path
 */
public synchronized void changeLogPath(String path) {
      String filename = (path.endsWith(File.separator)) ? path : path + File.separator;
      filename += LOGFILENAME + "-{timestamp}.log";

      props.setProperty("log4j.appender.A1","org.pollerosoftware.log4j.additions.appenders.TimestampFileAppender");
      props.setProperty("log4j.appender.A1.TimestampPattern","ddMMyyyy");
      props.setProperty("log4j.appender.A1.File",filename);
      LogManager.resetConfiguration();
      PropertyConfigurator.configure(props);
}

Respondido 26 Abr '13, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.