log4j.properties не работает в исполняемом банке

Я использую eclipse, и я поместил log4j.properties в каталог проекта, и я получаю к нему доступ, вызывая

PropertyConfigurator.configure("log4j.properties");

это отлично работает в Eclipse, но когда я извлекаю проект как исполняемый файл Jar и запускаю его на другом компьютере, я получаю сообщение об ошибке, в котором говорится, что он не может найти log4j.properties. Каково решение этой проблемы?


person Arya    schedule 12.08.2012    source источник


Ответы (2)


Что творится

PropertyConfigurator.configure(String) загружает и читает файл из файловой системы. Ваш файл свойств находится в каталоге проекта, который будет текущим рабочим каталогом при запуске из eclipse.

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

После того, как вы скопировали файл jar на другой компьютер, файла свойств больше нет.

Решения

Поскольку ваш файл свойств не является ресурсом, вам нужно будет переместить его отдельно: поместите его копию в файловую систему (чтобы ее можно было редактировать, обновлять и т. д.), в ваш текущий рабочий каталог вашего целевого хоста/ среда выполнения.

Рассмотрите возможность размещения его в какой-нибудь общей области файловой системы: например, в /tmp/log4j.properties или ~/.myproject/log4j.properties. Соответственно, ваш код должен быть скорректирован для его поиска.

Альтернатива

Скопируйте файл свойств в корень исходного дерева (по умолчанию /src). Затем его следует упаковать в банку. Загрузите данные в файл jar в качестве ресурса: PropertyConfigurator.configure(getClass().getResourceAsStream()).

В этом случае вы не можете просто отредактировать файл, чтобы настроить параметры ведения журнала.

Много раз будет написана логика, чтобы определить, находится ли файл свойств в файловой системе, и если нет, то загрузить значение по умолчанию из jar с помощью этого механизма.

person Richard Sitze    schedule 12.08.2012
comment
спасибо за ваш ответ, я переместил исполняемый файл jar на другой компьютер и поместил его на рабочий стол, а также переместил log4j.properties на другой компьютер и поместил его на рабочий стол. Но когда я запускаю его, я все равно получаю ту же ошибку, что и раньше, говоря, что файл не может быть найден. Я все еще использую ту же строку в своей программе PropertyConfigurator.configure(log4j.properties); я должен изменить это? - person Arya; 12.08.2012
comment
Это не тот случай, когда каталог, связанный с рабочим столом, является вашим текущим рабочим каталогом (CWD). В Windows 7 CWD (по умолчанию для настольных приложений) \Users\‹username›. В старых окнах это должен быть каталог, связанный с вашей учетной записью пользователя (родитель Моих документов). - person Richard Sitze; 12.08.2012
comment
Вы можете настроить CWD для использования при запуске программы; изучите свои свойства и найдите Start In:. Я не уверен, что это доступно для (исполняемого) файла Jar. - person Richard Sitze; 12.08.2012
comment
Кроме того, CWD можно показать, если вы в отчаянии, распечатав результаты System.getProperty("user.dir"). - person Richard Sitze; 12.08.2012

PropertyConfigurator.configure(ABC.class.getResourceAsStream("log4j.properties")) 

У меня сработало правильно, но в основном вам нужно поместить файл свойств Log4j в папку исходного кода (рядом с классом Java), или вы можете попробовать поместить снаружи и указать правильный путь в методе getResourceAsStream()

person Ravi Macha    schedule 20.01.2016