получить NoClassDefFoundError с log4j, общим журналом и tomcat 7 при попытке использовать log4j в веб-приложении

Я работаю над проектом Java / J2EE с несколькими веб-приложениями. Я хочу представить log4j в некоторых веб-приложениях. Поэтому я добавил log4j-1.2.16.jar в WEB-INF \ lib и log4j.properties в WEB-INF \ classes

В результате я получаю NoClassDefFoundError:

org.apache.commons.logging.LogConfigurationException:org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@f8f541 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category) (Caused by org.apache.commons.logging.LogConfigurationException: No suitable Log constructor [Ljava.lang.Class;@f8f541 for org.apache.commons.logging.impl.Log4JLogger (Caused by java.lang.NoClassDefFoundError: org/apache/log4j/Category))
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:543)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235)
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:209)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351)

Я получаю ту же ошибку, когда пытаюсь установить log4j напрямую внутри Tomcat. (Я добавил банки propers в tomcat / lib и т.д., как сказано здесь: http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)

Я обнаружил, что ошибка, вероятно, связана с проблемой загрузчика классов из-за jar-файла commons.logging, содержащегося у стороннего производителя. Действительно, когда я удаляю эту банку у стороннего поставщика, ошибка NoClassDefFoundError исчезает. ([Сторонняя сторона] /Bin/commons-logging-1.0.4.jar).

Но я не должен снимать банку с третьей стороны, она где-то используется.

Можно ли настроить ведение журнала Commons, чтобы игнорировать log4j при загрузке, или есть другой способ решить эту проблему с загрузчиком классов?

Я пытаюсь использовать log4j-1.2.16.jar, а сторонняя сторона содержит commons-logging-1.0.4.jar. Мой файл log4j.properties - это файл по умолчанию, предложенный apache в предыдущей ссылке.


person user3250328    schedule 12.03.2014    source источник


Ответы (2)


Вам необходимо перечитать цитируемый вами документ.

Цитата из http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j

Примечание. Действия, описанные в этом разделе, необходимы, если вы хотите перенастроить Tomcat для использования Apache log4j для собственного ведения журнала. Эти шаги не нужны, если вы просто хотите использовать log4j в своем собственном веб-приложении. - В этом случае просто поместите log4j.jar и log4j.properties в классы WEB-INF / lib и WEB-INF / вашего веб-приложения.

person Mark Thomas    schedule 12.03.2014
comment
просто поместите log4j.jar и log4j.properties в классы WEB-INF / lib и WEB-INF / вашего веб-приложения. Я пробовал это, я получаю ту же ошибку - person user3250328; 12.03.2014
comment
Затем обновите свой вопрос, чтобы отразить это и прояснить, где расположены различные JAR, на которые вы ссылаетесь. - person Mark Thomas; 12.03.2014
comment
ты думаешь, теперь ты согласен с моим вопросом? - person user3250328; 12.03.2014

Добавление следующего определения в ваш proguard. Это обязательно будет исправлено

-keep class com.amazonaws.org.apache.commons.logging.** { *; }
person Ahmad Arslan    schedule 30.06.2017