我試圖在我的應用程序啓動時加載自定義log.properties
文件。加載java.util.logging.config.file用於默認初始化
我的屬性文件和我的主類在同一個包中,所以我認爲-Djava.util.logging.config.file=log.properties
命令行參數應該加載屬性文件。
但是,只有當我指定屬性文件的完整絕對路徑時才加載屬性。任何建議如何使用相對路徑?
我試圖在我的應用程序啓動時加載自定義log.properties
文件。加載java.util.logging.config.file用於默認初始化
我的屬性文件和我的主類在同一個包中,所以我認爲-Djava.util.logging.config.file=log.properties
命令行參數應該加載屬性文件。
但是,只有當我指定屬性文件的完整絕對路徑時才加載屬性。任何建議如何使用相對路徑?
Java日誌記錄不會搜索整個硬盤中的文件;有很簡單的規則如何查找文件。你希望Java能夠看到這兩個文件是屬於彼此的,但是你沒有在任何地方說過。由於Java認爲屬性文件和類之間沒有連接,除非它們位於磁盤上的相同文件夾中,所以它找不到該文件。
-Djava.util.logging.config.file=log.properties
僅適用於文件log.properties
位於Java進程的當前目錄中(可能非常隨機)。所以你應該在這裏使用絕對路徑。
另一種解決方案是將文件logging.properties
移動到$JAVA_HOME/lib/
(或編輯應該在那裏的文件)。在這種情況下,您不需要設置系統屬性。
util logging不從類路徑加載,它需要一個絕對路徑,這就是爲什麼其他日誌包如log4j更容易配置,並且更適合web應用程序,這對於獲取abs路徑是一件痛苦的事情。
這在java.util.logging.LogManager doco中根本沒有解釋。
您可以非常容易地從相對路徑動態加載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());
}
嗨,謝謝你的回答。我剛剛開始使用java,所以我對包裝等知之甚少。 我有一個名爲javaapplication的包,它有一個NetBeans默認項目。 現在,log.properties文件在默認包中。因此,我的命令行如下所示: JavaApplication \ dist>你能給我一個額外的提示嗎? :) – abp 2009-04-30 08:36:32
你確定它沒有加載? 「javaw」吞下所有輸出到System.out和System.err。嘗試使用「java」代替(不帶「w」)。另外,您可以嘗試調試代碼以瞭解爲什麼它不記錄。只需設置一個斷點並「進入」日誌記錄調用(而不是「跳過」)。 log4j提供了一個調試選項,它可以在讀取配置時打印配置;我不知道你是否可以用java.util.logging做同樣的事情。 – 2009-05-07 14:30:13
感謝您的回覆。我想我會堅持通過一個類的運行時配置,因爲我無法獲得屬性文件加載相對路徑。 – abp 2009-05-12 07:09:32