/ / get NoClassDefFoundError z log4j, commons logging i tomcat 7 podczas próby użycia log4j w webappie - java, log4j, tomcat7, classloader, apache-commons-logging

pobierz NoClassDefFoundError z log4j, commons logging i tomcat 7 podczas próby użycia log4j w webappie - java, log4j, tomcat7, classloader, apache-commons-logging

Pracuję nad projektem Java / J2EE z kilkoma aplikacjami internetowymi. Chcę wprowadzić log4j w niektórych aplikacjach internetowych. Więc dodałem log4j-1.2.16.jar w WEB-INFlib i log4j.properties w WEB-INFklasses

W rezultacie otrzymuję 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)

Otrzymuję ten sam błąd, gdy próbuję bezpośrednio zainstalować log4j wewnątrz Tomcat. (Dodałem słoiki propers w tomcat / lib etc ... jak powiedział tutaj: http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j)

Odkryłem, że błąd prawdopodobnie pochodzi odproblem z klasą ładowań, ze względu na słoik commons.logging zawarty w trzeciej stronie. Rzeczywiście, kiedy usuwam ten słoik w 3rd party, NoClassDefFoundError znika. ([3rd party] /Bin/commons-logging-1.0.4.jar).

Ale nie wolno mi usuwać słoja z trzeciej strony, jest on używany gdzie indziej.

Czy jest możliwe skonfigurowanie logowania commons do zignorowania log4j po załadowaniu lub czy istnieje inny sposób na pokonanie tego problemu z modułem klas?

Próbuję użyć log4j-1.2.16.jar, a trzecia strona zawiera commons-logging-1.0.4.jar. Mój plik log4j.properties jest domyślny sugerowany przez Apache w poprzednim linku.

Odpowiedzi:

0 dla odpowiedzi № 1

Musisz ponownie przeczytać cytowany dokument.

Aby zacytować z http://tomcat.apache.org/tomcat-7.0-doc/logging.html#Using_Log4j

Uwaga: Kroki opisane w tej sekcji są potrzebne, gdy chcesz ponownie skonfigurować Tomcat, aby używał Log4j Apache do własnego rejestrowania. Te kroki nie są potrzebne, jeśli chcesz używać log4j we własnej aplikacji internetowej. - W takim przypadku wystarczy umieścić log4j.jar i log4j.properties w WEB-INF / lib i WEB-INF / classes twojej aplikacji internetowej.


0 dla odpowiedzi nr 2

Dodanie następującej definicji do proguarda. To na pewno zostanie naprawione

-keep class com.amazonaws.org.apache.commons.logging.** { *; }