2015-06-08 78 views
0

我看到Java Logging - where is my log file?,但對我來說,我想找出其中日誌文中FileHandler竟開,也就是說,如果我啓動多個進程,並有一個模式設置爲查找實際打開日誌文件

我的Java應用程序
java.util.logging.FileHandler.pattern=MyApp.%g.%u.log 

然後%g%u將取決於有多少進程正在運行的數字將被替換。

我可以迭代所有日誌記錄處理程序並找到基於文件的處理程序。但據我所見,FileHandler沒有辦法獲取當前打開的文件。

有沒有一種方法可以做到這一點?

+0

相關:[java.util.logging.FileHandler]所需的[JDK-4798814 getFiles())(https://bugs.openjdk.java.net/browse/JDK-4798814)。 – jmehrens

回答

2

是的,你可以使用反射來打破private的保護。看到這個問題:How do I read a private field in Java?

下一個選項是覆蓋類,並編寫你自己的處理程序,它公開此字段。

最後一個選項是使用不同的日誌框架,如logback或log4j2。爲他們寫自己的appender將比7月更簡單。

+0

我實際上使用了這些組合,實際上需要使用「lockName」作爲原始文件名的擴展FileHandler甚至不再作爲成員,所以我最終這樣做: \t Field f = FileHandler.class。 getDeclaredField( 「lockFileName」); \t f.setAccessible(true); \t return StringUtils.removeEnd((String)f.get(this),「.lck」); – centic

+0

我剛剛發佈了一個類似的問題,但我正在尋找不需要反射的Java 9解決方案。請參閱https://stackoverflow.com/questions/48697915/find-log-file-name-at-run-time-with-java-9-jdk-logging – David