2012-05-21 14 views
10

Ho commons-logging.jar (v1.0.4) e log4j-1.2.8.jar nel classpath e ottenere seguente errore di run-time:La causa principale di Log4JLogger "non può essere trovata o non è utilizzabile?

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

potresti fornire una traccia completa dello stack? – Dmitry

+6

Questo è probabilmente un problema del percorso di classe. Probabilmente hai un'altra versione di log4j nel tuo classpath, probabilmente nascosta dentro qualcos'altro. –

+0

ho trovato un jar con una versione diff di log4j, tuttavia potrebbe non essere l'ultimo, ancora in ricerca ... –

risposta

4

Si trattava di un problema di percorso di classe e nel percorso di classe era presente un'altra versione di log4j. Grazie Nathan Ryan!

1

Se si forniscono un'implementazione per un logger, l'implementazione deve definire un costruttore che prende un java.lang.String come argomento. In caso contrario, viene visualizzato un messaggio "org.apache.commons.logging.LogConfigurationException: la classe di registro specificata dall'utente '...' non può essere trovata o non è utilizzabile." La pagina faq del wiki di apache lo afferma.

Stai creando progetti specifici come servizi web o primaverili, ecc.? Se sì, allora si prega di analizzare i file di proprietà specifiche di progetto che avrebbero una proprietà in riferimento alla Logger, qualcosa come

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

se si dispone di un progetto Java con servlet.

+0

non abbiamo la nostra implementazione di Logger in modo da eliminare quello che è il problema. è un'applicazione core-java con jvm –

+0

ok. Si prega di fornire maggiori informazioni sul problema lo stack-trace, codice minimo di lavoro, ecc – mtk

1

Ho ricevuto questa stessa eccezione.

Ho un'implementazione del logger.

Non ha un costruttore che accetta una stringa come argomento.

Ho implementato un tale costruttore e questo ha risolto il problema per me.

1

Vedo questo errore a volte quando provo a eseguire un'applicazione Web su tomcat 7 nella mia eclissi 3.6. Si verifica dal nulla solo riavviando l'eclissi.

Dopo diversi (!) "Pulizia di tutti i progetti" e nuove distribuzioni dell'app Web sul server, l'applicazione viene eseguita nuovamente. Forse qualcun altro conosce l'esatto "incantesimo" per risolvere questo mistero senza prove ed errori?

1

Stavo ricevendo questo errore quando il jar di logging di apache commons era presente nel mio classpath ma log4j jar era in qualche modo mancante. Una volta aggiunto jar log4j al mio percorso di classe, questo errore era scomparso.

11

Se si utilizza Maven, è necessario assicurarsi dichiara commons-logging e 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> 

se si dichiara solamente commons-logging con ottenere errore Log4JLogger cannot be found or is not useable

3

avuto questo problema utilizzando log4j -2.x con commons-logging-1.2. Ritornato a log4j 1.2.x e tutto va bene con il mondo.

Problemi correlati