2014-09-06 11 views
6

मैं सेटअप करने के लिए slf4j + log4j के साथ एक परियोजना कोशिश कर रहा हूँ, लेकिन लानत बात सिर्फ काम नहीं करता है ... मैं बार आ रही है अपवाद:Log4J के साथ SLF4J को कैसे बांधें?

Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
java.lang.NoClassDefFoundError: org/apache/log4j/Level 
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129) 
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) 
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288) 
at TestLog.main(TestLog.java:9) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level 
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
... 6 more 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Level 
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:129) 
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:108) 
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:302) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:276) 
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:288) 
at TestLog.main(TestLog.java:9) 
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Level 
at java.net.URLClassLoader$1.run(URLClassLoader.java:372) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:360) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
... 6 more 

मैं जाँच की और वर्ग org.apache.log4j.Level "मेवेन निर्भरता> log4j-1.2.17.jar" के तहत मेरी परियोजना में है। तो वीएम इसे क्यों नहीं ढूंढ सकता?

मैं नीचे दिए गए विकल्पों को पहले से ही करने की कोशिश की:

  1. slf4j-api + log4j
  2. slf4j-api + slf4j-log4j12
  3. slf4j-api + log4j
  4. slf4j-api + slf4j-log4j12 + log4j

विकल्पों में से कोई काम किया :(

यहाँ मेरी currnet pom.xml है:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>org.sample</groupId> 
    <artifactId>DBUnitSample</artifactId> 
    <version>1.0</version> 

    <dependencies> 
    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>1.7.7</version> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.7.7</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.17</version> 
    </dependency> 

    </dependencies> 

</project> 

इसके अलावा, मैंने देखा है कि जब slf4j-log4j12 जोड़ने, यह log4j एक निर्भरता के रूप में रूप में अच्छी तरह पेड़ में कहते हैं, तो मैं अनुमान लगा रहा हूँ कि स्पष्ट रूप से यहाँ log4j जोड़ने अनावश्यक है , लेकिन मैंने इसे वैसे भी जोड़ा है। अभी भी कोई भाग्य नहीं है।

मेरा मुख्य कोड बहुत सरल है:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class SampleDao { 
    private static final Logger log = LoggerFactory.getLogger(SampleDao.class); 

    public static void main(String[] args) { 
     System.out.println("Hello"); 
     log.info("Logged"); 
    } 
} 

और मेरे log4j.properties:

log4j.rootLogger=DEBUG, STDOUT 
log4j.logger.deng=INFO 
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender 
log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout 
log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

कोई मुझे बता सकते हैं क्या मैं गलत कर रहा हूँ? मैंने पहले से ही SO पर उत्तरों की खोज करने का प्रयास किया है, लेकिन लॉग 4j निर्भरता जोड़ने के लिए उल्लिखित सभी उत्तरों, जिन्हें मैंने पहले से जोड़ा है ... इसलिए सुनिश्चित नहीं है कि क्या गलत है।

संपादित करें: यहां मेरी पूरी परियोजना संरचना है। मैं SampleDao पर रा-क्लिक कर रहा हूं और इसे जावा एप्लिकेशन के रूप में चला रहा हूं। (मैं भी अब के लिए dbunit निर्भरता को हटा दिया है slf4j समस्या पर शून्य में करने के लिए) Maven Project Structure

+0

वर्क्स का प्रयास करें, हो सकता है आपकी समस्या यह है कि आप classpath में जार जब आप अपने कार्यक्रम – morgano

+0

आप आप कैसे कार्यक्रम चलाने करते चलाने निर्दिष्ट नहीं करते है? लॉग 4j के लिए कुछ स्पष्ट आविष्कार जोड़ने का प्रयास करें, यदि यह काम करता है, तो कारण आपके निर्माण उपकरण होंगे। – Loki

+0

मैं ग्रहण में एम्बेडेड मेवेन का उपयोग कर रहा हूं और मैंने इसे एक मेवेन प्रोजेक्ट के रूप में बनाया है। तो मैं क्लास को जावा एप्लिकेशन के रूप में चलाने के लिए एक्लिप्स रन कॉन्फ़िगरेशन का उपयोग कर रहा हूं (आर-क्लिक> जावा एप्लिकेशन के रूप में चलाएं)। मैंने रन कॉन्फ़िगरेशन में क्लासपाथ भी चेक किया है, और मैं देख सकता हूं कि मैवेन निर्भरता इसका हिस्सा हैं। तो सुनिश्चित नहीं है कि log4j क्यों नहीं खोजा गया है। – Pat

उत्तर

0

अगर आप कमांड लाइन से mvn compile exec:java -D"exec.mainClass"=SampleDao चलाने आप अभी भी त्रुटि मिलती है?

Hello 
INFO [SampleDao.main()] (SampleDao.java:9) - Logged 

तो, अपने पोम और कोड ठीक होने लगते हैं: मैं अपने मशीन पर Maven 3.1.1 और अपने कोड के साथ इस आदेश चलाकर, के बाद कमांड लाइन पर निम्नलिखित देखते हैं। ऐसा लगता है कि आप कोड को चलाने का प्रयास कैसे कर रहे हैं, इसमें कुछ गड़बड़ है।

भी ध्यान रखें कि निम्न सरलीकृत विन्यास काम करना चाहिए:

<dependencies> 
    <dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.7.7</version> 
    </dependency> 
</dependencies> 

आप अगर पोम अन्य निर्भरता है कि परियोजना के लिए log4j के विभिन्न संस्करणों को जोड़ने है log4j का एक विशेष संस्करण निर्दिष्ट करने के लिए होगा।

2

मेरे लिए इन निर्भरताओं

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.5</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>1.7.5</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-log4j12</artifactId> 
    <version>1.7.5</version> 
    <scope>runtime</scope> 
</dependency> 
+1

कोशिश की, एक ही त्रुटि। इसके अलावा, मुझे लगता है कि, 'slf4j-log4j12' के साथ, हमें किसी और चीज की आवश्यकता नहीं है। इसके अलावा, एसएलएफ 4 जे दस्तावेज़ के अनुसार, इसे कई बाइंडिंग जोड़ने के खिलाफ सलाह दी जाती है: 'अपने वर्ग पथ पर एक से अधिक बाध्यकारी न रखें' (http://www.slf4j.org/manual.html) तो मुझे यकीन नहीं है, अगर जेसीएल और लॉग 4 जे जोड़ना एक अच्छा विचार है। – Pat

+0

लेकिन मैं सक्रिय एमक्यू का उपयोग नहीं कर रहा हूं। मुझे यह नहीं मिला, यह मेरे पास slf4j मुद्दे से कैसे संबंधित है? – Pat

संबंधित मुद्दे