2012-07-02 43 views
1

在我當前的項目中,我需要創建一個獨立於log4j.properties中配置內容的日誌文件。FileAppender打開FileHandle但從不記錄

我試圖通過一個動態創建FileAppender連接到rootLogger實現這一目標:

public static void setupAnalysisLogfile(String filename) { 
    PatternLayout layout 
      = new PatternLayout("%d{dd MMM yyyy HH:mm:ss,SSS} [%t] %-5p %C{1} %x - %m%n"); 
    if(Config.CREATE_SEPERATE_LOG) 
    { 
    FileAppender appender; 
    try { 
     String path = (Config.LOGFILE_PATH!=null)?Config.LOGFILE_PATH:filename; 
     appender = new FileAppender(layout,path); 
     appender.setName("Analysis Appender"); 
     org.apache.log4j.Logger.getLogger("my.package.hierarchy").addAppender(appender); 
    } catch (IOException e) { 
     org.apache.log4j.Logger.getLogger(Config.class).warn(
                 "Failed to create a dedicated log " 
                 + filename, 
                 e); 
    } 
    }   
} 

Config.LOGFILE_PATH不爲空(來自一個命令行參數)一切正常。日誌文件是在指定的路徑中創建的。

但是,當LOGFILE_PATH is null沒有創建日誌文件,或者更確切地說什麼也沒有寫入它

-Dlog4j.debug運行程序給出:

log4j: setFile called: /home/tbender/.something/bytecode/OMFG_3527961e3fb1134e1d3221c000879a90ff1022b6/bytecode/OMFG-1340994475441.log, true 
log4j: setFile ended 

當我單步執行代碼,並保持眼睛開放的文件句柄的名單上,我可以看到,文件句柄是在創建附加器的過程中產生的。一旦應用程序完成,不存在日誌文件。

任何想法?

+0

你有沒有嘗試通過代碼? – user845279

+0

到目前爲止,我無法通過eclipse識別附加的log4j代碼。但這是我目前正在研究的選項。 – er4z0r

回答

0

好吧,最終它不是FileAppend導致的問題,而是完全不相關的一段代碼,它刪除並重新創建了我的日誌文件所在的文件夾。 D'OH!

很好的提示這樣的煩惱:當你在Linux下使用strace的:

strace -tt -f -e trace=create,open,close,unlink -o strace.out java -jar yourjar.jar 

這會告訴你哪些文件被創建,oepened,關閉或刪除。你也可以包括一堆其他的東西。更多的電話可以發現here