2012-09-17 7 views
30

मेरे पास SLF4J के लिए निर्भरता है। मैं इस त्रुटि हो रही है:SLF4J: कक्षा "org.slf4j.impl.StaticLoggerBinder" लोड करने में विफल। एक मेवेन प्रोजेक्ट में

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 

यहाँ मेरी Maven प्रविष्टि है:

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

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>1.6.6</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 

कहाँ समस्या है?


संपादित करें: log4j निर्भरता के बिना मैं निम्नलिखित अपवाद

Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254) 
    at org.apache.bval.jsr303.ConfigurationImpl.<clinit>(ConfigurationImpl.java:50) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228) 
    at org.apache.bval.jsr303.ApacheValidationProvider.createGenericConfiguration(ApacheValidationProvider.java:66) 
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:173) 
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:50) 
    at com.daimler.zv9.basic.entity.AbstractEntity.<clinit>(AbstractEntity.java:73) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:195) 
    at java.lang.Class.forNameImpl(Native Method) 
    at java.lang.Class.forName(Class.java:168) 

EDIT2: यह एक उदाहरण MAVEN पेड़ है कि मैं पाने के

[INFO] com.myCompany.abc:ABC_Document:ejb:0.0.1-SNAPSHOT 
[INFO] +- com.myCompany.abc:ABC_Basic:jar:0.0.1-SNAPSHOT:compile 
[INFO] +- com.myCompany.iap:javax.j2ee:jar:5.0.0:provided 
[INFO] +- com.myCompany.iap:logging:jar:5.0.0:provided 
[INFO] +- com.myCompany.iap:util:jar:5.0.0:provided 
[INFO] +- junit:junit:jar:4.8.2:test 
[INFO] +- javax.servlet:jstl:jar:1.2:provided 
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile 
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.6:compile 
[INFO] \- org.mockito:mockito-all:jar:1.9.0:test 
+0

@Ceki शायद तुम एक विचार है? – Kayser

+0

क्या यह एक स्टैंडअलोन प्रोग्राम है या कुछ सर्वर में तैनात है? – basiljames

+0

@basiljames मुझे mvn openjpa: sql कमांड के साथ त्रुटि मिलती है। यह कहीं भी स्थापित नहीं है। – Kayser

उत्तर

33

मुझे लगता है कि आप अपने विकासशील वातावरण के रूप में ग्रहण का उपयोग कर रहे हैं।

ग्रहण जूनो, इंडिगो और केप्लर बंडल मैवेन संस्करण (एम 2 ई) का उपयोग करते समय, एसएलएफ 4 जे संदेश को दबाने वाले नहीं हैं: कक्षा "org.slf4j.impl.StaticLoggerBinder" लोड करने में विफल। यह व्यवहार m2e संस्करण 1.1.0.20120530-0009 और उसके बाद से मौजूद है।

हालांकि, यह एक त्रुटि के रूप में इंगित किया गया है कि आपके लॉग सामान्य रूप से सहेजे जाएंगे। हाइलाइट की गई त्रुटि तब भी मौजूद होगी जब तक कि इस बग का कोई फिक्स न हो। m2e support site में इसके बारे में अधिक जानकारी।

वर्तमान उपलब्ध समाधान ग्रहण के बंडल संस्करण के बजाय बाहरी मेवेन संस्करण का उपयोग करना है। आप इस समाधान के बारे में इस समाधान के बारे में और नीचे दिए गए प्रश्न में इस बग के बारे में अधिक जानकारी प्राप्त कर सकते हैं, जो मुझे विश्वास है कि आप जिस समस्या का सामना कर रहे हैं उसका वर्णन करता है।

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". error

+0

अद्यतन किया है यदि बाहरी मेवेन संस्करण का उपयोग काम नहीं करता है, तो मैं आपके स्थानीय मेवेन भंडार की सामग्री को हटाने की सलाह देता हूं। – Kowlown

15

निकालें है

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
</dependency> 

slf4j-log4j12 log4j slf4j के लिए बाध्यकारी यदि आप किसी अन्य log4j निर्भरता जोड़ने की जरूरत है न है।

जोड़ा गया
log4j.properties में log4j विन्यास प्रदान करें और अपने वर्ग पथ में जोड़ें। वहाँ नमूना विन्यास here

हैं या आप कुछ निर्भरता यह आवश्यकता होती है की वजह से अपने

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.6.1</version> 
</dependency> 

के लिए बाध्य करता है, तो आप slf4j कॉन्फ़िगर कर रहे हैं बदल सकते हैं।

+0

मैंने इसे हटा दिया। मैं इस अपवाद 'हो रही है SLF4J LoggerFactory का दृष्टांत करने में विफल की सूचना दी अपवाद: java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder \t org.slf4j.LoggerFactory.bind (LoggerFactory.java:121) पर \t पर ऑर्ग .slf4j.LoggerFactory.performInitialization (LoggerFactory.java:111) \t org.slf4j.LoggerFactory.getILoggerFactory (LoggerFactory.java7268) ' – Kayser

+0

एक समान [पोस्ट] (http://stackoverflow.com/questions/7421612/ slf4j-fail-to-load-class-org-slf4j-impl-staticloggerbinder) – basiljames

+0

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

2

संदेश आप का उल्लेख काफी स्पष्ट है:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 

SLF4J एपीआई एक बाध्यकारी नहीं मिल सकता है, और एक एनओपी कार्यान्वयन के लिए डिफ़ॉल्ट का फैसला किया। आपके मामले में slf4j-log4j12.jar किसी भी तरह दिखाई नहीं दे रहा था जब LoggerFactory कक्षा स्मृति में लोड किया गया था, जो स्वीकार्य रूप से बहुत अजीब है। "एमवीएन निर्भरता: पेड़" आपको क्या बताता है?

विभिन्न निर्भरता घोषणाएं यहां पर भी कारण नहीं हो सकती हैं। मुझे दृढ़ता से संदेह है कि slf4j-api.jar का पूर्व-1.6 संस्करण आपके ज्ञान के बिना तैनात किया जा रहा है।

+0

यह निर्भरता है: पेड़ बताता है: '[INFO] [INFO] --- मेवेन-निर्भरता-प्लगइन: 2.5.1: पेड़ (डिफ़ॉल्ट-क्ली) @ GEM_Web --- [INFO] com.mycompany.proj : My_Web: युद्ध: 0.0.1-स्नैपशॉट ... [INFO] + - javax.servlet: jstl: jar: 1.2: प्रदान किया गया [INFO] + - org.slf4j: slf4j-api: jar: 1.6.6: संकलन [INFO] + - org.slf4j: slf4j-simple: jar: 1.6.6: संकलित [INFO] \ - org.mockito: mockito-all: jar: 1.9.0: test' – Kayser

+0

उपरोक्त नहीं है सुपाठ्य। आईएमओ, इसे प्रश्न भाग में ले जाया जाना चाहिए। – Ceki

+0

संकेत के लिए धन्यवाद। मैंने प्रश्न – Kayser

6

मैं IntelliJ में इस में पड़ गए और जोड़कर तय मेरी पोम के लिए निम्न:

<!-- logging dependencies --> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>${logback.version}</version> 
     <exclusions> 
      <exclusion> 
       <!-- Defined below --> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
+0

एक बेहतर फिक्स 'निर्भरता प्रबंधन' तत्व का उपयोग करना होगा जो 'slf4j-api' –

+0

के लिए संस्करण को कम करता है। मैं वसंत बूट 15 का उपयोग कर रहा हूं। यह समाधान मेरे लिए काम करता है –

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