Загрузите файл java.util.logging.config.file для инициализации по умолчанию.

StackOverflow https://stackoverflow.com/questions/805701

Вопрос

Я пытаюсь загрузить кастомный 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top