Я работаю над проектом 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 в предыдущей ссылке.