Загрузите java.util.logging.config.file для инициализации по умолчанию - PullRequest
25 голосов
/ 30 апреля 2009

Я пытаюсь загрузить пользовательский файл log.properties при запуске моего приложения.

Файл моих свойств находится в том же пакете, что и мой основной класс, поэтому я предположил, что параметр командной строки -Djava.util.logging.config.file=log.properties должен загрузить файл свойств.

Но свойства загружаются только когда я указываю полный абсолютный путь к файлу свойств. Любые предложения, как использовать относительный путь?

Ответы [ 3 ]

51 голосов
/ 06 мая 2011

Вы можете динамически загружать java.util.logging файлы свойств по относительному пути очень легко. Это то, что я положил внутрь блока static {} в моем классе Main. Поместите свой файл 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());
}
19 голосов
/ 30 апреля 2009

Журналирование Java не ищет файл на вашем жестком диске; Есть очень простые правила, как искать файлы. Вы хотите, чтобы Java увидела, что эти два файла принадлежат друг другу, но вы нигде не говорили об этом. Поскольку Java не видит связи между файлом свойств и вашим классом, кроме того, что они находятся в одной папке на вашем диске, он не может найти файл.

-Djava.util.logging.config.file=log.properties работает только в том случае, если файл log.properties находится в текущем каталоге процесса Java (что может быть довольно случайным). Таким образом, вы должны использовать абсолютный путь здесь.

Альтернативным решением было бы переместить файл logging.properties в $JAVA_HOME/lib/ (или отредактировать файл, который должен быть там). В этом случае вам не нужно устанавливать свойство System.

7 голосов
/ 24 февраля 2010

Ведение журнала утилит не загружается из classpath, ему нужен абсолютный путь, поэтому другие пакеты ведения журналов, такие как log4j, гораздо проще в настройке и лучше для веб-приложений, где сложно получить пути abs.

это вообще не объясняется в документе java.util.logging.LogManager.

...