2009-04-30 86 views
23

我試圖在我的應用程序啓動時加載自定義log.properties文件。加載java.util.logging.config.file用於默認初始化

我的屬性文件和我的主類在同一個包中,所以我認爲-Djava.util.logging.config.file=log.properties命令行參數應該加載屬性文件。

但是,只有當我指定屬性文件的完整絕對路徑時才加載屬性。任何建議如何使用相對路徑?

回答

18

Java日誌記錄不會搜索整個硬盤中的文件;有很簡單的規則如何查找文件。你希望Java能夠看到這兩個文件是屬於彼此的,但是你沒有在任何地方說過。由於Java認爲屬性文件和類之間沒有連接,除非它們位於磁盤上的相同文件夾中,所以它找不到該文件。

-Djava.util.logging.config.file=log.properties僅適用於文件log.properties位於Java進程的當前目錄中(可能非常隨機)。所以你應該在這裏使用絕對路徑。

另一種解決方案是將文件logging.properties移動到$JAVA_HOME/lib/(或編輯應該在那裏的文件)。在這種情況下,您不需要設置系統屬性。

+0

嗨,謝謝你的回答。我剛剛開始使用java,所以我對包裝等知之甚少。 我有一個名爲javaapplication的包,它有一個NetBeans默認項目。 現在,log.properties文件在默認包中。因此,我的命令行如下所示: JavaApplication \ dist>你能給我一個額外的提示嗎? :) – abp 2009-04-30 08:36:32

+0

你確定它沒有加載? 「javaw」吞下所有輸出到System.out和System.err。嘗試使用「java」代替(不帶「w」)。另外,您可以嘗試調試代碼以瞭解爲什麼它不記錄。只需設置一個斷點並「進入」日誌記錄調用(而不是「跳過」)。 log4j提供了一個調試選項,它可以在讀取配置時打印配置;我不知道你是否可以用java.util.logging做同樣的事情。 – 2009-05-07 14:30:13

+0

感謝您的回覆。我想我會堅持通過一個類的運行時配置,因爲我無法獲得屬性文件加載相對路徑。 – abp 2009-05-12 07:09:32

5

util logging不從類路徑加載,它需要一個絕對路徑,這就是爲什麼其他日誌包如log4j更容易配置,並且更適合web應用程序,這對於獲取abs路徑是一件痛苦的事情。

這在java.util.logging.LogManager doco中根本沒有解釋。

44

您可以非常容易地從相對路徑動態加載java.util.logging屬性文件。這是我在我的Main課中放入static {}塊的內容。將您的logging.properties文件放在default package中,您可以使用以下代碼輕鬆訪問它。

final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties"); 
try 
{ 
    LogManager.getLogManager().readConfiguration(inputStream); 
} 
catch (final IOException e) 
{ 
    Logger.getAnonymousLogger().severe("Could not load default logging.properties file"); 
    Logger.getAnonymousLogger().severe(e.getMessage()); 
}