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 № 1Musisz 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.** { *; }