получавате NoClassDefFoundError с log4j, Commons logging и tomcat 7, когато се опитвате да използвате log4j в webapp

Работя по 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. (Добавих правилните буркани в tomcat/lib и т.н... както е казано тук: http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)

Открих, че грешката вероятно идва от проблем с loadloader, поради commons.logging jar, съдържащ се в трета страна. Наистина, когато премахна този буркан от третата страна, NoClassDefFoundError изчезва. ([3rd party]/Bin/commons-logging-1.0.4.jar).

Но не трябва да махам буркана от трета страна, той се използва някъде другаде.

Възможно ли е да се конфигурира общата регистрация да игнорира 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