2012-05-21 11 views
10

Ich habe commons-logging.jar (v1.0.4) und log4j-1.2.8.jar im Classpath und immer Fehler folgende Laufzeit:Was ist die Ursache von Log4JLogger 'kann nicht gefunden werden oder ist nicht verwendbar?

Caused by: org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable. 
    at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementation(LogFactoryImpl.java:874) 
    at org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:604) 
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:336) 
    at org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:310) 
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685) 
+0

können Sie die gesamte Stack-Trace bereitstellen? – Dmitry

+6

Dies ist wahrscheinlich ein Klassenpfadproblem. Sie haben wahrscheinlich eine andere Version von log4j in Ihrem Klassenpfad, möglicherweise in etwas anderem versteckt. –

+0

Ich fand ein Glas, das eine diff-Version von log4j hatte, aber das könnte nicht das letzte sein, immer noch Suche ... –

Antwort

4

Dies war ein Klassenpfadproblem und wir hatten eine andere Version von log4j im Klassenpfad. Danke Nathan Ryan!

1

Wenn Sie eine Implementierung für einen Logger bereitstellen, Die Implementierung muss einen Konstruktor definieren, der eine java.lang.String als Argument akzeptiert. Andernfalls erhalten Sie eine "org.apache.commons.logging.LogConfigurationException: Benutzerdefinierte Protokollklasse '...' kann nicht gefunden werden oder ist nicht verwendbar." Die faq Seite des Apache-Wiki gibt dies an.

Erstellen Sie ein bestimmtes Projekt wie Web-Services oder Feder, etc? Wenn ja, dann die projektspezifischen Eigenschaftsdateien bitte analysieren, die eine Eigenschaft in Bezug auf den Logger, so etwas wie

<property name="logger">javax.servlet,org.apache.commons.logging</property>

haben würden, wenn Sie ein Java-Projekt mit Servlets haben.

+0

wir haben nicht unsere Implementierung von Logger so beseitigen, dass das Problem ist. es ist eine Core-Java-Anwendung, die in einem eigenen jvm läuft –

+0

ok. Bitte geben Sie weitere Informationen zu Ihrem Problem an: Stack-Trace, minimaler Arbeitscode, etc – mtk

1

Ich erhielt die gleiche Ausnahme.

Ich habe eine Implementierung von Logger.

Es hatte keinen Konstruktor, der einen String als Argument verwendet.

Ich implementierte solch einen Konstruktor und das löste das Problem für mich.

1

Ich sehe diesen Fehler manchmal, wenn ich versuche, eine Webanwendung auf Tomcat 7 in meiner Eclipse 3.6 auszuführen. Es kommt aus dem Nichts, nur durch den Neustart von Eclipse.

Nach mehreren (!) "Alle Projekte bereinigen" und neuen Bereitstellungen der Web-App auf dem Server wird die Anwendung erneut ausgeführt. Vielleicht kennt jemand anders den genauen "Zauberspruch", um dieses Geheimnis ohne Versuch und Irrtum zu lösen?

1

Ich bekam diesen Fehler, wenn Apache Commons Logging Glas war dort in meinem Classpath aber log4j Glas irgendwie fehlte. Sobald ich log4j jar meinem Klassenpfad hinzugefügt habe, war dieser Fehler verschwunden.

11

Wenn Sie Maven verwenden, müssen Sie sicherstellen, commons-logging und log4j in pom.xml

<dependencies> 
    <dependency> 
     <groupId>commons-logging</groupId> 
     <artifactId>commons-logging</artifactId> 
     <version>1.1.3</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
</dependencies> 

, wenn Sie erklären Sie erklären nur commons-Anmeldung mit Log4JLogger cannot be found or is not useable Fehler bekommen

3

dieses Problem hatte log4j mit -2.x mit commons-logging-1.2. Zurück zu log4j 1.2.x und alles ist in Ordnung mit der Welt.