2011-11-08 4 views
4

J'ai une application qui utilise log4j pour se connecter à un fichier texte, j'ai placé un fichier log4j.properties dans mon fichier jar exécutable contenant les paramètres de configuration de journal par défaut.Modifier le fichier de propriétés log4j à l'exécution provoquer un journal par défaut vide créé

Mon fichier log4j.properties se présente comme suit:

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 

Mon application ont également une option de ligne de commande qui permet à l'utilisateur de modifier le nom du fichier journal, donc j'avoir une fonction comme celle-ci que le changement les paramètres de log4j lors de l'exécution:

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); 
    } 

Tout fonctionne bien, sauf lorsque l'instruction LogManager.resetConfiguration() et/ou PropertyConfigurator.configure (props) sont exécutées un fichier journal vide par défaut (mylogfile.log) est créé automatiquement. Après cela, tout ce que je connecte à partir de mon application sera écrit correctement dans le nouveau fichier, mais un fichier vide est quand même créé (avec le nom du fichier journal par défaut dans log4j.properties).

Y at-il un moyen d'éviter la création du fichier journal par défaut vide?

Répondre

1

J'ai finalement développé la bibliothèque log4j-additions qui permet la création d'un applicateur d'initialisation paresseux qui évite la création du fichier journal vide.

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 

Procédé pour modifier le chemin

/** 
* 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); 
} 
Questions connexes