2011-11-08 15 views
4

私はlog4jを使ってテキストファイルにログオンするアプリケーションを持っていますが、デフォルトのログ設定パラメータを含む実行可能なjarファイル内にlog4j.propertiesファイルを置いています。実行時にlog4jプロパティファイルを変更すると、空のデフォルトログが作成されます

私のlog4j.propertiesファイルは、次のようになります。

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 

私のアプリケーションは、ユーザーがログファイル名を変更できるようにするコマンドラインオプションを持っているので、私は、次のその変化のような機能を持っています実行時にlog4jのの設定:

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

すべてが正常に動作し、場合を除きときの文LogManager.resetConfiguration()および/またはPropertyConfigurator.configure(props)が実行され、デフォルトの空のログファイル(mylogfile.log)が自動的に作成されます。 その後、私のアプリケーションからログしたものはすべて新しいファイルに正しく書き込まれますが、とにかく(log4j.propertiesのデフォルトのログファイル名の名前で)空のファイルが作成されます。

空のデフォルトログファイルの作成を回避する手段はありますか?

答えて

1

最後に、空のログファイルの作成を避けるLazy初期化アペンダの作成を可能にするlog4j-additionsライブラリを開発しました。

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 

方法パスを変更する

/** 
* 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); 
} 
関連する問題