java.lang.ClassNotFoundException: org.apache.log4j.Level (Programare, Java, Hibernate, Excepție, Log4J, Slf4J)

Mahmoud Saleh a intrebat.

Încerc să folosesc hibernate 3.5.1 final într-o aplicație swing și aici sunt borcanele pe care le folosesc:

  • hibernate-core-3.5.1-Final
  • hibernate-entitymanager-3.5.1-Final
  • hibernate-jpa-2.0-api-1.0.0.0.Final
  • hibernate-annotations-3.5.1-Final
  • hibernate-commons-annotations-3.2.0.Final
  • dom4j-1.6.1.1
  • slf4j-api-1.6.4
  • slf4j-log4j12-1.6.4

Când încerc să rulez aplicația, primesc următoarea eroare:

Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org/apache/log4j/Level
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:279)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:265)
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:165)
    at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:127)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at com.xeno.xecamp.desktopManagement.Main.main(Main.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 11 more
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:279)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:252)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:265)
    at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:165)
    at org.hibernate.ejb.Ejb3Configuration.<clinit>(Ejb3Configuration.java:127)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
    at com.xeno.xecamp.desktopManagement.Main.main(Main.java:16)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

Comentarii

  • Dacă încercați să utilizați legături simbolice pentru a atașa fișierele jar, consultați stackoverflow.com/questions/22240776/… -…  > Por GlenPeterson.
3 răspunsuri
Jesper

De asemenea, trebuie să includeți fișierul Log4J JAR în classpath.

Rețineți că slf4j-log4j12-1.6.4.jar este doar un adaptor pentru a face posibilă utilizarea Log4J prin intermediul API SLF4J. Nu conține implementarea efectivă a Log4J.

Comentarii

  • îmi puteți spune, vă rog, care este dependența maven compatibilă cu versiunea pe care o folosesc? –  > Por Mahmoud Saleh.
  • Ei bine, am nevoie doar de log4j-1.2.16.jar –  > Por Mahmoud Saleh.
  • adăugarea log4j-1.2.16.jar a rezolvat problema și în cazul meu, dar slf4j-log4j12-1.6.4.jar nu a rezolvat-o –  > Por lizzie.
  • de fapt, adăugarea dependenței maven ca atare nu a fost suficientă în cazul meu, a trebuit, de asemenea, să adaug steagul: <scope>build</scope> pentru a face să ruleze: <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1. 2.17</version> <scope>build</scope> </dependency> –  > Por Macilias.
elias

Trebuie să descărcați log4j și adăugați-l în classpath-ul dumneavoastră.

wenchunl

În mediul meu, tocmai am adăugat cele două fișiere la class path. Și funcționează bine.

slf4j-jdk14-1.7.25.jar
slf4j-api-1.7.25.jar

Comentarii

  • Mulțumesc, acest lucru a funcționat pentru mine în octombrie 2019. Nici măcar nu am avut nevoie de log jar, ci slf4j-jdk a avut grijă de el. –  > Por Azurespot.