Я использую eclipse, и я поместил log4j.properties в каталог проекта, и я получаю к нему доступ, вызывая
PropertyConfigurator.configure("log4j.properties");
это отлично работает в Eclipse, но когда я извлекаю проект как исполняемый файл Jar и запускаю его на другом компьютере, я получаю сообщение об ошибке, в котором говорится, что он не может найти log4j.properties. Каково решение этой проблемы?
Ответ 1 · рейтинг 7 · Richard Sitze
Что творится
PropertyConfigurator.configure(String) загружает и читает файл из файловой системы. Ваш файл свойств находится в каталоге проекта, который будет текущим рабочим каталогом при запуске из eclipse.
После того, как вы упаковали все в банку и развернули ее, в банку помещаются только файлы классов и ресурсы. Ресурсы - это файлы, отличные от Java, которые находятся в вашем исходном дереве.
После того, как вы скопировали файл jar на другой компьютер, файла свойств больше нет.
Решения
Поскольку ваш файл свойств не является ресурсом, вам нужно будет переместить его отдельно: поместите его копию в файловую систему (чтобы ее можно было редактировать, обновлять и т. д.), в ваш текущий рабочий каталог вашего целевого хоста/ среда выполнения.
Рассмотрите возможность размещения его в какой-нибудь общей области файловой системы: например, в /tmp/log4j.properties или ~/.myproject/log4j.properties. Соответственно, ваш код должен быть скорректирован для его поиска.
Альтернатива
Скопируйте файл свойств в корень исходного дерева (по умолчанию /src). Затем его следует упаковать в банку. Загрузите данные в файл jar в качестве ресурса: PropertyConfigurator.configure(getClass().getResourceAsStream()).
В этом случае вы не можете просто отредактировать файл, чтобы настроить параметры ведения журнала.
Много раз будет написана логика, чтобы определить, находится ли файл свойств в файловой системе, и если нет, то загрузить значение по умолчанию из jar с помощью этого механизма.
Ответ 2 · Ravi Macha
PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties"))
У меня сработало правильно, но в основном вам нужно поместить файл свойств Log4j в папку исходного кода (рядом с классом Java), или вы можете попробовать поместить снаружи и указать правильный путь в методе getResourceAsStream()