Загрузите файл java.util.logging.config.file для инициализации по умолчанию.
-
03-07-2019 - |
Вопрос
Я пытаюсь загрузить кастомный log.properties
файл при запуске моего приложения.
Мой файл свойств находится в том же пакете, что и мой основной класс, поэтому я предположил, что -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/
(или отредактируйте файл, который должен там быть).В этом случае вам не нужно задавать системное свойство.
Другие советы
Вы можете динамически загружать 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());
}
util logging не загружается из пути к классам, ему нужен абсолютный путь, поэтому другие пакеты ведения журналов, такие как log4j, гораздо проще настроить и лучше подходят для веб-приложений, где сложно получить пути abs.
это вообще не объясняется в документе java.util.logging.LogManager.