SLF4J: ไม่สามารถโหลดคลาส“ org.slf4j.impl.StaticLoggerBinder” ความผิดพลาด


115
  • เกี่ยวกับEclipse IDE ( Indigo , JunoและKepler (เวอร์ชัน 32 และ 64 บิต))
  • แพลตฟอร์ม : Windows , Ubuntu , Mac
  • เวอร์ชัน m2e : 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 ,
    1.4.0.20130601-0317

ข้อมูลทั่วไป

ข้อผิดพลาดข้างต้นเกิดขึ้นหลังจากอัปเดต m2e เป็นเวอร์ชัน 1.1 โดยการลบ m2e 1.1 และย้อนกลับไปที่ m2e 1.0 ทุกอย่างทำงานได้ดี ฉันพยายามทำซ้ำปัญหาใน Windows และ Ubuntu และทำให้ฉันมีข้อผิดพลาดเดียวกัน มีการทดสอบการกำหนดค่าต่างๆของ slf4j-api และ logback แต่ดูเหมือนจะไม่มีผล

ข้อผิดพลาดปรากฏในโครงการ maven ใด ๆแม้ว่าจะไม่มีการประกาศการพึ่งพา slf4jก็ตาม

  • โครงการ Maven ใหม่ -> maven-archetype-quickstart

    และ

  • New Maven Project -> โครงการง่ายๆโดยไม่ต้องเลือกแม่แบบ

    ส่งผลให้

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

การทดสอบสภาพแวดล้อมและการกำหนดค่า

ทดสอบกับ Eclipse Indigo และ Eclipse Juno (32 และ 64 บิตทั้งคู่) บน Mac 32 บิตบน Ubuntu และ 64 และ 32 บิตบน Windows ทดสอบการติดตั้งใหม่ของJuno Classic , Juno Modeling tools , Kepler Standard , Kepler Modeling Toolsแล้วเกิดข้อผิดพลาดเดียวกัน

ข้อผิดพลาดจะปรากฏขึ้นพร้อมกับclean , ติดตั้ง , ทดสอบ , ปรับใช้ , สร้างแหล่งที่มา , ตรวจสอบ , คอมไพล์ , แพ็กเกจ , การทดสอบการรวม, การตรวจสอบและการรวมเป้าหมายที่สะอาดกับเป้าหมายที่เหลือ แต่ดูเหมือนว่ามันยังมีพารามิเตอร์-eและ-X มีความพยายามที่จะลบที่เก็บ m2e และดาวน์โหลดตั้งแต่เริ่มต้น แต่ไม่ประสบความสำเร็จอีกครั้ง ฉันควรจะบอกว่ามันได้รับการทดสอบใน 3 เครื่องที่แตกต่างกันและกล่องเสมือนระบบทั้งหมดข้างต้น แต่มันเกิดข้อผิดพลาดเดียวกัน

พยายามกำหนดค่าการล็อกแบ็คที่แตกต่างกันทั้งหมด(ตั้งแต่ 1.0.4 ถึง 1.0.13) ที่แก้ไขการอ้างอิงslf4j-apiและlogback-coreแต่ทั้งหมดทำให้เกิดข้อผิดพลาดเดียวกัน:

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version></version>
</dependency>

พยายามกำหนดค่าslf4j-simple ที่แตกต่างกันทั้งหมด (จาก 1.6.1 ถึง 1.7.5)

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

พยายามกำหนดค่าlog4j-over-slf4j ที่แตกต่างกันทั้งหมด (จาก 1.6.1 ถึง 1.7.5)

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

พยายามกำหนดค่าslf4j-jdk14 ที่แตกต่างกันทั้งหมด (จาก 1.6.1 ถึง 1.7.5)

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-jdk14</artifactId>
   <version></version>
   <scope>compile</scope>
</dependency>

พยายามกำหนดค่าslf4j-log4j12 ที่แตกต่างกันทั้งหมด (จาก 1.6.1 ถึง 1.7.5)

<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-log4j12</artifactId>
     <version></version>
     <scope>compile</scope>
</dependency>

พยายามกำหนดค่าslf4j-nop 1.7.5

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-nop</artifactId>
  <version>1.7.5</version>
  <scope>compile</scope>
</dependency>

สุดท้าย แต่ไม่ท้ายสุดบันทึกจะถูกบันทึกและพิมพ์แม้จะมีข้อผิดพลาด


วิธีสร้างข้อผิดพลาด

  • ดาวน์โหลด Eclipse Juno, Indigo หรือ Kepler 32 หรือ 64 bit (การติดตั้งทั้งหมดจะทำให้เกิดข้อผิดพลาดเดียวกัน)

    • ติดตั้ง m2e - Maven Integration สำหรับ Eclipse

      หรือ

    • อัปเดตเวอร์ชัน m2e ของคุณเป็น1.1.0.20120530-0009หรือ1.2.0.20120903-1050หรือ1.3.0.20130129-0926หรือ1.4.0.20130601-0317 )


    • เลือกไฟล์ -> ใหม่ -> อื่น ๆ -> โครงการ Maven -> คลิกถัดไป -> เลือก
      maven-archetype-quickstart จากแคตตาล็อก -> เสร็จสิ้น

      หรือ

    • เลือก File-> New-> Other-> Maven Project-> คลิก Next-> เลือก Create a simple project (ข้ามการเลือก archetype) -> Complete Artifact info-> Finish

  • คลิกขวาที่โครงการ -> เรียกใช้เป็น -> ติดตั้งใหม่ทั้งหมด (หรือเป้าหมายอื่น ๆ ที่กล่าวถึงข้างต้น)

บรรทัดแรกบนคอนโซลจะเป็น

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.

PS โครงการที่มีอยู่จะเกิดข้อผิดพลาดเดียวกันหลังจากอัปเดตเวอร์ชัน m2e เป็น 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 , 1.4.0.20130601-0317


อัพเดท

แก้ไข

เว็บไซต์สนับสนุน m2e:

  • คำถามข้างต้นถูกโพสต์เป็นข้อบกพร่องในเว็บไซต์สนับสนุน m2e และคำตอบจาก Igor Fedorenko ก็คือ

    ไม่มีแผนที่จะระงับข้อความนี้ในทันที

    สำหรับการดูข้อบกพร่องข้างต้นโปรดดูเว็บไซต์สนับสนุนอย่างเป็นทางการของ m2e


แก้ไข 2

  • ตัวบ่งชี้ข้อผิดพลาดข้างต้นมีอยู่ในm2eเวอร์ชัน1.2.0.20120903-1050 ด้วย


แก้ไข 3

  • ตัวบ่งชี้ข้อผิดพลาดข้างต้นมีอยู่ในm2eเวอร์ชัน1.3.0.20130129-0926 ด้วย


แก้ไข 4

  • ตัวบ่งชี้ข้อผิดพลาดข้างต้นมีอยู่ในm2eเวอร์ชัน1.4.0.20130601-0317 ด้วย


แก้ไข 5

                              ***Reported FIXED***
  • ข้อผิดพลาดข้างต้นได้รับการรายงานว่าแก้ไขแล้วสำหรับm2eเวอร์ชัน1.5.0 / Luna M3 ( เป้าหมายไมล์สโตน ) เวอร์ชันนี้ยังไม่พร้อมให้ดาวน์โหลด
  • Luna M3ถูกกำหนดไว้สำหรับ 15
  • รุ่น dev ล่าสุดมีอยู่ที่นี่
  • ข้อมูลเพิ่มเติมเกี่ยวกับเหตุการณ์สำคัญ M2E ที่คุณสามารถหาที่เก็บข้อมูลหลัก M2E

@EliranMalka มันยาว แต่มีเหตุผล การพยายามช่วยผู้คนให้หลีกเลี่ยงการถามคำถามเดียวกันและใส่รายละเอียดทุกอย่างที่อาจดูเหมือนจำเป็นเพื่อให้เข้าใจว่าพวกเขากำลังเผชิญปัญหาเดียวกันหรือไม่ไม่ทำให้ฉันมีทางเลือกมากเกินไป :-)
Konstantinos Margaritis

ฉันได้รับข้อผิดพลาดนี้ขณะพยายามใช้ข้อมูลสปริงกับ neo4j ที่ฉันมีslf4jทั้งslf4j-api-1.7.7และjcl-over-slf4j-1.7.7และและถ้าฉันพยายามลบใครก็ตามออกไปฉันจะได้รับข้อความแสดงข้อผิดพลาดว่าLoggerคลาสของพวกเขาหายไป ฉันควรทำอย่างไรดี?
user1885868

@KonstantinosMargaritis คุณช่วยบอกวิธีแก้ไขด้วย pom.xml ได้ไหมฉันจะทำให้มันทำงานได้ในการตั้งค่าในเครื่อง แต่ในเจนกินส์มันมักจะล้มเหลว
vikramvi

@vikramvi การตั้งค่าปัจจุบันของคุณคืออะไร?
Konstantinos Margaritis

@KonstantinosMargaritis ขอบคุณสำหรับการกลับมาในเรื่องนี้ ฉันรู้ว่า maven เป็นเวอร์ชัน 3.0 บน Linux ที่อัปเกรดเป็นเวอร์ชันล่าสุดแล้วลองอีกครั้ง สิ่งนี้ช่วยแก้ปัญหาได้ แต่ต้องใช้เวลาทั้งวันในการพยายามค้นหาว่ามีอะไรผิดปกติเกิดขึ้น ขอบคุณอย่างไรก็ตาม
vikramvi

คำตอบ:


75

ฉันยังสามารถยืนยันข้อผิดพลาดนี้ได้

วิธีแก้ปัญหา:คือการใช้maven ภายนอกภายใน m2eclipse แทนที่จะใช้ maven แบบฝัง

ซึ่งทำได้ในสามขั้นตอน:

1 ติดตั้ง maven บนเครื่องท้องถิ่น ( เครื่องทดสอบคือ Ubuntu 10.10)

mvn - รุ่น

Apache Maven 2.2.1 (rdebian-4) เวอร์ชัน Java: 1.6.0_20 Java home: / usr / lib / jvm / java-6-openjdk / jre ตำแหน่งเริ่มต้น: de_DE, การเข้ารหัสแพลตฟอร์ม: UTF-8 OS name: "linux" เวอร์ชัน: "2.6.35-32-generic" arch: "amd64" Family: "unix"

2 เรียกใช้ maven ลิงก์ภายนอก วิธีเรียกใช้ maven จากคอนโซล

> cd path-to-pom.xml
> mvn test
    [INFO] Scanning for projects...
    [INFO] ------------------------------------------------------------------------
    [INFO] Building Simple
    [INFO]    task-segment: [test]
    [INFO] ------------------------------------------------------------------------
    [...]
    [INFO] Surefire report directory: [...]/workspace/Simple/target/surefire-reports
    
    -------------------------------------------------------
     T E S T S
    -------------------------------------------------------
    Running net.tverrbjelke.experiment.MainAppTest
    Hello World
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.042 sec
    
    Results :
    
    Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESSFUL
    [INFO] ------------------------------------------------------------------------
    [...]

3 ภายใน m2eclipse: เปลี่ยนจากmaven แบบฝังมาเป็น local maven

  • ค้นหาว่า dir การติดตั้ง maven home ในพื้นที่อยู่ที่ไหน ( mvn --versionหรือ google สำหรับคุณMAVEN_HOMEสำหรับฉันสิ่งนี้ช่วยฉันได้/usr/share/maven2)
  • ใน eclipse Menu-> Window-> Preferences-> Maven-> Installation-> ป้อนสตริงนั้น จากนั้นคุณควรเปลี่ยนไปใช้ maven ภายนอกใหม่ของคุณ
  • จากนั้นเรียกใช้ Project ของคุณเช่น "maven test"

ข้อความแสดงข้อผิดพลาดควรจะหายไป


1
ฉันยอมรับคำตอบของคุณเนื่องจากเป็นวิธีแก้ปัญหาเพียงอย่างเดียวเพื่อหลีกเลี่ยงข้อผิดพลาดที่น่ารำคาญ ขอบคุณมากสำหรับคำตอบเชิงวิเคราะห์ของคุณ :) ..
Konstantinos Margaritis

3
อืมฉันใช้ Windows และเปลี่ยนเป็นการติดตั้งภายนอกใหม่ แต่ข้อผิดพลาดยังคงอยู่!?
stefan.at.wpf

4
ขออภัยมันใช้งานได้ โปรดสังเกตว่ามีอ็อพชันสำหรับรันไทม์ maven (ภายใน / ภายนอก) บนคอนฟิกูเรชันการรัน ดังนั้นหากคุณใช้ไฟล์ที่บันทึกไว้อย่าลืมอัปเดต
stefan.at.wpf

@ stefan.at.wpf ดีใจที่ได้ยินว่าได้ผล หากคุณต้องการคุณสามารถสมัครสมาชิกในรายชื่ออีเมลของข้อบกพร่องและคุณจะได้รับแจ้งในกรณีที่มีการเปลี่ยนแปลงบางอย่าง
Konstantinos Margaritis

2
สำหรับฉัน#mvn --versionสะดวกที่จะแสดง MAVEN_HOME
biaobiaoqi

25

มีเอกสารในไซต์ SLf4J เพื่อแก้ไขปัญหานี้ ฉันทำตามนั้นและเพิ่ม slf4j-simple-1.6.1.jar ลงในแอพพลิเคชั่นของฉันพร้อมกับ slf4j-api-1.6.1.jar ที่ฉันมีอยู่แล้วสิ่งนี้ช่วยแก้ปัญหาของฉันได้

slf4j


4
ใช้งานได้ใน maven สามารถเพิ่ม: <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-simple </artifactId> <version> 1.XX </version> </dependency> // เพียงแค่แทนที่ด้วย เวอร์ชันของคุณ
Enrique San Martín

@ Mohammed Irfan ฉันอาจต้องเพิ่ม twojar นี้ในโฟลเดอร์ libs ใน eclipse หรือไม่
Erum

1
ฉันใช้ Maven เวอร์ชันที่ใหม่กว่าและทำตามขั้นตอนข้างต้นแล้ว แต่นี่เป็นคำตอบที่ทำให้ปัญหาหายไป - ขอบคุณ :)
Rob Wilson

15

หากคุณใช้ Gradle ให้เพิ่มสิ่งนี้:

dependencies { 
... 
compile "org.slf4j:slf4j-simple:1.7.9" 
... 
}

ทำงานที่นี่กับ Gradle !! คุณอธิบายได้ไหมว่าเกิดอะไรขึ้นเมื่อเราเพิ่มห้องสมุดนั้น
Felipe Pereira

5

มีข้อผิดพลาดที่คล้ายกันกับผลลัพธ์เดียวกันกับ Gradle และสามารถแก้ไขได้โดยทำตาม:

//compile 'org.slf4j:slf4j-api:1.7.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.1'

บรรทัดที่ไม่แสดงความคิดเห็นคือเส้นที่ทำให้เกิดข้อผิดพลาด ฉันเชื่อว่าคุณสามารถโอนสิ่งนี้ไปยัง Maven ได้


3

คุณไม่ได้ระบุเวอร์ชันในไฟล์การพึ่งพา maven ของคุณอาจเป็นเพราะเหตุใดจึงไม่เลือก jar ล่าสุด
รวมทั้งคุณต้องใช้ deppendency อื่นด้วยslf4j-log4j12รหัสอาร์ติแฟกต์
รวมสิ่งนี้ไว้ในไฟล์ pom ของคุณ

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

โปรดแจ้งให้เราทราบหากยังไม่สามารถแก้ไขข้อผิดพลาดได้
ฉันขอแนะนำให้คุณดูลิงก์นี้


3
ตรวจสอบเวอร์ชันทั้งหมดที่ระบุไว้แล้ว ฉันไม่ได้ประกาศไว้ที่นั่นเพื่อหลีกเลี่ยงการทำซ้ำ แท็กว่างเปล่าโดยเจตนา โปรดตรวจสอบว่าปัญหาข้างต้นถูกโพสต์เป็นข้อบกพร่องในเว็บไซต์สนับสนุน m2e และไม่มีวิธีใดในการแก้ไขข้อผิดพลาดข้างต้นเว้นแต่จะถูกบีบอัดโดยผู้พัฒนา m2e ฉันอ่านเว็บไซต์หลายครั้งและฉันได้รวมไลบรารีที่เป็นไปได้ทั้งหมดที่สามารถแก้ไขปัญหาได้ น่าเสียดายที่ไม่มีการกำหนดค่าใด ๆ ทำงานได้เนื่องจากเกี่ยวข้องกับ m2e มากกว่าการอ้างอิงที่ประกาศไว้ ข้อผิดพลาดข้างต้นไม่แสดงในคอนโซล maven หรือ Netbeans เฉพาะใน Eclipse
Konstantinos Margaritis

1
slf4j-log4j12 เป็นอีกหนึ่งการผูกร่วมกับ slf4j-simple, slf4j-jdk14 และ logback-classic การอ้างอิงใด ๆ ข้างต้นน่าจะช่วยแก้ปัญหาเกี่ยวกับการผูกได้ ดังที่ฉันได้อธิบายไปก่อนหน้านี้ปัญหาเกิดขึ้นกับ m2e ขอบคุณต่อไป
Konstantinos Margaritis

3

วางรหัสนี้ลงในไฟล์ pom.xml ของคุณ มันใช้ได้กับฉัน

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

มันแก้ข้อผิดพลาด“ org.slf4j.impl.StaticLoggerBinder” แต่ตอนนี้กำลังบันทึกทุกอย่างฉันใส่ log4j.xml และ log4j.properties (ทีละรายการ) ใน src / test / resources ตอนนี้เฟรมเวิร์กทั้งหมดในโปรเจ็กต์ของฉันกำลังบันทึก ข้อความจำนวนมากยกเว้นการบันทึกของฉันเอง
OJVM

1

ได้ดูปัญหาที่เกิดขึ้นแล้ว เชื่อว่านี่จะเป็นการอ่านที่ดีสำหรับผู้อื่นที่มาพร้อมกับปัญหาเดียวกันนี้:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=387064


โปรดให้คำตอบแบบเต็มไม่ใช่แค่ลิงค์
slfan

@Prince หากคุณอ่านคำอธิบายคำถามคุณจะพบส่วนที่ระบุว่า "สำหรับการดูข้อบกพร่องข้างต้นโปรดดูที่เว็บไซต์สนับสนุนอย่างเป็นทางการของ m2e" ซึ่งชี้ไปที่ url ที่คุณได้กล่าวถึง
Konstantinos Margaritis

อุ๊ย.. แย่แล้ว ขอโทษอย่างจริงใจ!
เจ้าชาย

1

ฉันมีปัญหาที่คล้ายกันสำหรับแอปพลิเคชัน Spring Boot - Gradle ที่ทำงานบน Eclipse Luna ฉันสามารถแก้ไขได้โดยเพิ่มรายการด้วยตนเองใน. classpath ของโปรเจ็กต์ของฉัน

<classpathentry sourcepath="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/3150039466ad03e6ef1c7ec1c2cbb0d96710cf64/slf4j-simple-1.7.7-sources.jar" kind="lib" path="C:/Users/<username>/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-simple/1.7.7/8095d0b9f7e0a9cd79a663c740e0f8fb31d0e2c8/slf4j-simple-1.7.7.jar"/>

ความคิดที่เป็นไปตามนี้วิธีการแก้ปัญหา แต่วิธีการนำไปใช้นั้นขึ้นอยู่กับกรณีไป วิธีหนึ่งในการแก้ไขคือวิธีที่ฉันใช้ข้างต้น

หวังว่านี่จะช่วยได้


0

นี่ไม่ใช่ข้อความแสดงข้อผิดพลาด แต่เป็นคำเตือน มีการอธิบายอย่างชัดเจนในเว็บไซต์ของพวกเขาว่า:

คำเตือนนี้เช่นไม่ใช่ข้อผิดพลาดข้อความจะถูกรายงานเมื่อไม่พบผู้ให้บริการ SLF4J บนพา ธ คลาส การวาง slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar หรือ logback-classic.jar หนึ่งรายการบนพา ธ คลาสควรแก้ปัญหาได้ โปรดทราบว่าผู้ให้บริการเหล่านี้ต้องกำหนดเป้าหมาย slf4j-api 1.8 หรือใหม่กว่า

ในกรณีที่ไม่มีผู้ให้บริการ SLF4J จะเริ่มต้นเป็นผู้ให้บริการเครื่องตัดไม้ที่ไม่มีการดำเนินการ (NOP)

https://www.slf4j.org/codes.html#StaticLoggerBinder


0

ฉันมีปัญหาเดียวกันในการเขียนโปรแกรมผู้ผลิต Kafka โดยใช้ java ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากไลบรารี slf4j ไม่ถูกต้อง ใช้การพึ่งพา maven ที่เรียบง่ายด้านล่างซึ่งจะแก้ไขปัญหาของคุณ

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.