2011-09-21 56 views
1

我在我的應用程序中使用log4j,並將配置文件設置爲控制檯和滾動文件擴展器。下面粘貼配置文件。有沒有辦法改變 打開代碼中的配置文件後的fileappender輸出文件?它對我開放很好,但有時我會想要使用不同的輸出文件,而不是配置文件中的默認輸出文件。感謝任何方向。如何將RollingFileAppender更改爲配置文件中設置的另一個?

log4j.rootLogger=info, stdout, RFA 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=[%p] [%d{MM/dd/yyyy HH:mm:ss}] - %m %n 

log4j.appender.RFA=org.apache.log4j.RollingFileAppender 
log4j.appender.RFA.File=${user.home}/output.log 

log4j.appender.RFA.MaxFileSize=100KB 
# Keep backup files 
log4j.appender.RFA.MaxBackupIndex=5 

log4j.appender.RFA.layout=org.apache.log4j.PatternLayout 
log4j.appender.RFA.layout.ConversionPattern=[%p] [%d{MM/dd/yyyy HH:mm:ss}] - %m %n 
+0

你的意思是在代碼中,獲取appender配置文件設置文件輸出,然後使用setFile?這就是我想要做的,但沒有看到一種方法來檢索它。 – Green

回答

2

如果你的意思是編輯的屬性從您的代碼文件,並有log4j的檢測到它,你將不得不作出log4j的監視性能先向致電PropertyConfigurator.configureAndWatch("log4j.properties")

不過,我更願意訪問appender使用Logger api編程式提供,如kunal。

更新;代碼編寫

Enumeration allAppenders = Logger.getRootLogger().getAllAppenders(); 
while (allAppenders.hasMoreElements()) { 
    Object object = (Object) allAppenders.nextElement(); 
    if (object instanceof RollingFileAppender) { 
     RollingFileAppender appender = (RollingFileAppender) object; 
     appender.setFile("/path/to/new/file.log"); 
     appender.activateOptions(); 
     break; 
    } 
} 
+1

我想'appender.activateOptions();'也是需要的。 –

+0

@iuliux是的。 – dantuch

0

定義另一個appender(具有不同的File值)。

0

我想你想以編程方式設置(更改)文件。看看RollingFileAppender API

public void setFile(String fileName, 
        boolean append, 
        boolean bufferedIO, 
        int bufferSize) 
      throws IOException 

設置並打開文件,其中日誌輸出會去。指定的文件必須是可寫的。

相關問題