#eclipse #logging #configuration #eclipse-plugin #log4j
#eclipse #ведение журнала #конфигурация #eclipse-плагин #log4j
Вопрос:
Две проблемы / вопросы:
1) Во многих потоках log4j / форумах / и т. Д. Я вижу результаты определения log4j.debug, содержащего ссылки на файлы конфигурации log4j с префиксом «file:», Как показано ниже:
log4j: Using URL [file:/data/app/conf/log4j.properties] for automatic log4j configuration.
В коде, который я обновляю (автором которого является другой разработчик, который сейчас работает где-то еще), я вижу:
log4j: Using URL [bundleresource://23/log4j.properties] for automatic log4j configuration
Что / где находится «bundleresource», как показано выше? Я думаю, что это специальный подключаемый модуль Eclipse, который я не смог идентифицировать.
2) Этот вопрос возникает из-за более серьезной проблемы, связанной с невозможностью загрузить файл конфигурации log4j без явной вставки его в аргументы командной строки JVM (например, -Dlog4j.configuration ). Я заменяю приложение на основе плагина Eclipse на тестовом сервере, которое не имеет этого аргумента командной строки, указанного в сценарии запуска, и может корректно запускаться с правильной инициализацией log4j. Когда я иду, чтобы заменить это приложение последней сборкой из нашего исходного репозитория, приложению не удается найти файл конфигурации log4j. Есть мысли о том, почему первое приложение может запуститься и найти файл конфигурации log4j, в то время как второе (более новое) приложение не может?
Буду признателен за любую помощь.
Спасибо!
Обновление / Редактирование
Вывод из приложения с определенным log4j.debug:
log4j: Trying to find [log4j.xml] using context classloader sun.misc.Launcher$AppClassLoader@9fe666.
log4j: Trying to find [log4j.xml] using sun.misc.Launcher$AppClassLoader@9fe666 class loader.
log4j: Trying to find [log4j.xml] using ClassLoader.getSystemResource().
log4j: Trying to find [log4j.properties] using context classloader sun.misc.Launcher$AppClassLoader@9fe666.
log4j: Trying to find [log4j.properties] using sun.misc.Launcher$AppClassLoader@9fe666 class loader.
log4j: Trying to find [log4j.properties] using ClassLoader.getSystemResource().
log4j: Could not find resource: [null].
Ответ №1:
Вы можете загрузить файл свойств для Log4j, сначала загрузив свойства, а затем вставив его в конфигуратор свойств log4j:
Properties props = new Properties();
FileInputStream fis = new FileInputStream("mylog4j.properties");
props.load(fis);
fis.close();
PropertyConfigurator.configure(props);
Bundleresource кажется специфичным для библиотеки. Я рекомендую использовать grep в исходном коде:
grep -irn ./ -e "bundleresource"
Комментарии:
1. Я бы сделал это, но после grep-обработки исходного кода ни PropertyConfigurator, ни DocumentConfigurator не вызываются явно. Кажется, все это выполняется при запуске автоматически в предыдущей установке. Похоже, что он находит конфигурацию log4j в пути к классу, нашел где-то, чего я не знаю. Есть еще идеи по этому поводу?
2. Похоже, что эта проблема действительно связана с тем, что файл конфигурации log4j не найден в пути к классу. Я опубликую свой вывод в последующем редактировании.
3. Я, по крайней мере, ответил на вопрос 2. = D Я никогда не использую материал classpath log4j, я просто использую то, что опубликовал мой ответ. Возможно, на вашем основном сервере вы могли бы загрузить файл свойств из известного местоположения и добавить его в свой путь к jar и загрузить из загрузчика классов.