SLF4J: โหลดคลาส“ org.slf4j.impl.StaticLoggerBinder” ไม่สำเร็จ


619

แอ็พพลิเคชันของฉันจะถูกปรับใช้บนทั้ง tcServer และ WebSphere 6.1 แอปพลิเคชั่นนี้ใช้ ehCache และต้องใช้ slf4j ในการพึ่งพา เป็นผลให้ฉันเพิ่ม slf4j-api.jar (1.6) jar ในบันเดิลไฟล์สงครามของฉัน

แอปพลิเคชันทำงานได้ดีใน tcServer ยกเว้นข้อผิดพลาดต่อไปนี้:

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.

แต่เมื่อฉันปรับใช้ใน WebSphere java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinderฉันได้รับ

ยังมาพร้อมกับ Failed to load class "org.slf4j.impl.StaticMDCBinder"

ฉันได้ตรวจสอบ classpaths ของทั้งสองแอ็พพลิเคชันเซิร์ฟเวอร์แล้วและไม่มี slf4j jar ตัวอื่น

ไม่มีใครมีความคิดใด ๆ ว่าเกิดอะไรขึ้นที่นี่


นี้บทความแก้ปัญหาของฉัน
บัญชีم

คำตอบ:


517

ฉันมีปัญหาเดียวกันกับ WebSphere 6.1 เมื่อ Ceki ชี้ให้เห็นมีขวดมากมายที่ WebSphere ใช้และหนึ่งในนั้นชี้ไปที่รุ่นเก่ากว่าของ slf4j

ทางเลือก No-Op เกิดขึ้นกับ slf4j -1.6+ เท่านั้นดังนั้นสิ่งที่เก่ากว่านั้นจะทำให้เกิดข้อยกเว้นและหยุดการปรับใช้ของคุณ

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

นี่เป็นการแก้ไขปัญหาของฉัน หวังว่าจะช่วยคนอื่นที่มีปัญหานี้


4
ใช่ข้อผิดพลาดเกิดขึ้นตามที่ได้กล่าวไว้ที่นี่ - slf4j.org/manual.htmlแต่ฉันได้รับข้อผิดพลาดใหม่ตอนนี้ - เกิดจาก: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
david blaine

1
"ขณะที่ Ceki ชี้ให้เห็นมีขวดมากมายที่ WebSphere ใช้และหนึ่งในนั้นชี้ไปที่รุ่นเก่ากว่าของ slf4j" - มากสำหรับ Maven ที่ดูแลการพึ่งพา! เป็นเรื่องตลก
AndroidDev

167
สวัสดีคุณผู้ใช้ MAVEN: mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.6.2
Sergio

2
ฉันใช้ 1.7 และมีปัญหาเดียวกัน ฉันเพิ่ม slf4j-simple-1.7.jar และตอนนี้ปัญหาได้รับการแก้ไข
littletiger

1
มันไม่ได้ผลสำหรับฉัน jar slf4j ง่าย ๆ ไม่เก็บ log4j.properties แต่ฉันใช้การใช้งานโดยเพิ่ม slf4j-log4j12 และ log4j jar ซึ่งทำงานได้ดีสำหรับฉัน
flyrain

379

นี่คือสำหรับผู้ที่มาที่นี่จากการค้นหาของ Google

หากคุณใช้ Maven เพียงเพิ่มต่อไปนี้

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

หรือ

   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <version>1.7.5</version>
   </dependency>
   <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-simple</artifactId>
       <version>1.6.4</version>
   </dependency>

1
มีเหตุผลที่slf4j-simpleจะไม่เป็นเวอร์ชั่นเดียวกันslf4j-apiหรือไม่? พวกเขาอาจจะทำงานร่วมกันได้ดี แต่ฉันคิดว่ามันปลอดภัยกว่าและเป็นการปฏิบัติที่ดีกว่าโดยทั่วไปเพื่อให้พวกเขาใช้เวอร์ชันเดียวกัน นอกจากนี้หากคุณต้องการเปิดใช้งานการบันทึกเฉพาะคอนโซลตัวอย่างเช่นเมื่อใช้การทดสอบหน่วยslf4j-simpleดูเหมือนว่าจะเพียงพอ (สำหรับฉัน)
Ivaylo Slavov

22
AFAIK คุณควรมีเพียง 1 impl ของ slf4j เช่น slf4j-log4j12 หรือ slf4j-simple ไม่ใช่ทั้งสองอย่าง
Ondra Žižka

@Igor KatKov ใช้งานได้กับเครื่องของท้องถิ่น แต่ได้รับข้อผิดพลาดเดียวกันกับ Jenkins ไม่แน่ใจว่าเกิดอะไรขึ้น คุณช่วยอธิบายได้
ไหม

slf4j-api ต้องการการกำหนดค่าซึ่งไม่สามารถใช้ได้เมื่อคุณเรียกใช้ครั้งแรก (และยังไม่ได้แก้ไขไฟล์การกำหนดค่าใด ๆ ) การใช้ slf4j-simple จะช่วยให้คุณใช้ Logger พื้นฐานโดยไม่ต้องกำหนดค่าไฟล์ใด ๆ ยกเว้น WYSIWYG จากนั้นคุณสามารถย้ายกลับไปที่ slf4j-api เมื่อคุณเรียนรู้ที่จะกำหนดค่าไฟล์และกำหนด Logger output ตามที่คุณต้องการ (ยังคงเรียนรู้ว่ามีที่ไหนบ้างและจะแก้ไขได้ด้วยตัวเอง)
chrips

53

เพียงเพิ่มส่วนนี้ลงในpom.xmlของคุณ:

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

3
วิธีแก้ปัญหาทำงานให้ฉัน เป็นมูลค่าชี้ไปที่เอกสาร (ที่ฉันพบข้อผิดพลาดอธิบาย): slf4j.org/codes.html#StaticLoggerBinder
Witold Kaczurba

2
ไม่มีอะไรอื่นนอกจากสิ่งนี้ใช้ได้กับฉันในขณะที่ใช้ตัวอย่างผู้ผลิตคาฟคาอย่างง่าย ขอบคุณมัด!
Viren

@WitoldKaczurba ถูกต้อง ฉันมีปัญหาเดียวกันขณะใช้การพึ่งพาโดยใช้ maven ฉันเพิ่ง googled และไปที่slf4j.org/codes.html#StaticLoggerBinderซึ่งระบุปัญหาและวิธีแก้ปัญหา ฉันใช้ slf4j-api เวอร์ชั่น 1.7.25 หลังจากการตรวจสอบเอกสารเกี่ยวกับการเชื่อมโยงที่กล่าวถึงฉันเพียงแค่ใช้ <พึ่งพา> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>และปัญหาได้รับการแก้ไข
โมฮัมหมัดอานัส

ฉันไม่เข้าใจจุดที่ใช้ Maven หากห้องสมุดที่ต้องการตัวบันทึก (เช่นแฮนด์บาร์ที่ต้องการ slf4j) ไม่ต้องประกาศใน pom ของพวกเขา ยังไงก็ขอบคุณนะ.
Eric Duminil

ในกรณีของฉันนี่ไม่ใช่วิธีแก้ปัญหา มันเป็นเพียงการซ่อนข้อมูลว่ามีรุ่นที่เข้ากันไม่ได้ของ slf4j และ log4j หรือปลั๊กอินอื่น
Hariprasad

42

คุณต้องเพิ่มต่อไป jar ไฟล์ใน classpath slf4j-simple-1.6.2.jarของคุณ: หากคุณยังไม่มีโปรดดาวน์โหลด โปรดดูhttp://www.slf4j.org/codes.html#multiple_bindings


แต่ฉันไม่มีโถนั้นใน classc tcServer ของฉันนั่นคือสิ่งที่ทำให้ฉันสับสน ฉันไม่เข้าใจว่าฉันไม่ต้องการ jar เพิ่มเติมใน tcServer แต่ทำได้ใน WebSphere
JJ180

1
ทำงานให้ฉันและง่ายกว่าคำตอบที่ยอมรับได้มาก เวอร์ชั่น 1.7.7 ก็ทำงานเช่นกัน
La-comadreja

1
ฉันแล้วก็jul-to-slf4jในของฉันpom.xmlและเพียงแค่เพิ่มslf4j-simpleก่อนและทำงานดี
slugmandrew

จะเพิ่มไฟล์ jar ลงใน classpath ได้อย่างไร
Dean013

ได้โปรดอธิบายให้ฉันฟังว่าเส้นทางของชั้นเรียนคืออะไร? อยู่ไหน? ฉันไม่เข้าใจ
Rose8525

36

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

ที่https://mvnrepository.com/artifact/org.slf4j/slf4j-simple คุณจะพบ SLF4J Simple Binding เวอร์ชันล่าสุด เลือกหนึ่งที่เหมาะกับคุณที่สุด (ยัง 1.7.26 จาก 2019-02 เป็นรุ่นที่มีเสถียรภาพในปี 2019-07) และรวมไว้ใน pom.xml ของคุณ

เพื่อความสะดวกของคุณมีการแสดงบางส่วนที่นี่ - แต่มันอาจจะไม่ทันสมัยเมื่อคุณอ่านสิ่งนี้!

เวอร์ชั่นของปี 2019-10

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>2.0.0-alpha1</version>
 </dependency>

รุ่นเบต้าของ ก.พ. 2019

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.8.0-beta4</version>
</dependency>

เวอร์ชั่นเสถียร 2019-12

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-simple</artifactId>
   <version>1.7.30</version>
</dependency>

ฉันลบส่วนการทดสอบขอบเขตออกจากความคิดเห็นด้านล่าง


6
ทำไมคุณใช้<scope>test</scope>? จากประสบการณ์ของฉันฉันอย่างน้อยต้องมีruntimeขอบเขตเพื่อให้แน่ใจว่าslf4j-simpleอยู่ใน classpath อยากรู้อยากเห็นว่าคุณมีการทำงานที่มีเพียงtestขอบเขต ...
eCoE

ขอบคุณที่ชี้นำสิ่งนี้ ฉันลบแท็กขอบเขตออกจากคำตอบของฉันตามนั้น มันเป็นปัญหาที่ถูกตัดและวาง - ลิงก์ที่ฉันจัดหาจะให้การอ้างอิงแบบเบต้าด้วยวิธีนี้
Wolfgang Fahl

27

ฉันกำลังเผชิญกับข้อผิดพลาดเดียวกัน ฉันได้กำหนดค่า slf4j-api, slf4j-log4j12 และ log4j ในการพัฒนาท้องถิ่นของฉัน การตั้งค่าทั้งหมดถูกปรับ แต่พึ่งพา slf4j-log4j12 ซึ่งผมคัดลอกมาจาก mvnrepository <scope>test</scope>มีขอบเขตการทดสอบ เมื่อฉันลบสิ่งนี้ทุกอย่างก็โอเค

บางครั้งความผิดพลาดที่โง่เขลาทำให้หัวของเรา;)


1
ขอบคุณหนึ่งล้าน! ฉัน hade ปัญหาเดียวกันและกำลังจะยอมแพ้จนกว่าฉันจะพบโพสต์ของคุณ!
Ergodyne

1
สิ่งนี้ช่วยฉันด้วย
cod3min3

27

บางครั้งเราควรดูบันทึกจาก SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.warnin

สิ่งนี้เกิดขึ้นเมื่อไม่พบการรวม SLF4J ที่เหมาะสมบนเส้นทางคลาส

คุณสามารถค้นหาสาเหตุที่คำเตือนนี้เกิดขึ้นได้
เพิ่มหนึ่งขวดจาก*slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jarหรือlogback-classic.jar*ไปยังเส้นทางการเรียนควรจะแก้ปัญหาที่เกิดขึ้น

compile "org.slf4j:slf4j-simple:1.6.1"

ตัวอย่างเช่นเพิ่มรหัสข้างต้นให้กับคุณbuild.gradleหรือรหัสที่สอดคล้องกับpom.xmlสำหรับโครงการ Maven


15

ใส่ไฟล์slf4j-log4j12-1.6.4.jarใน classpath จะทำเคล็ดลับ


6
หรือเพิ่มการพึ่งพาลงใน pom ของคุณ <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-log4j12 </artifactId> </
difactency

11

หากคุณใช้ maven ในการจัดการการพึ่งพาดังนั้นคุณสามารถเพิ่มการพึ่งพาต่อไปนี้ใน pom.xml

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

สำหรับผู้ใช้ที่ไม่ใช่ Maven เพียงดาวน์โหลดไลบรารีและใส่ลงใน classpath โครงการของคุณ

ที่นี่คุณสามารถดูรายละเอียด: http://www.mkyong.com/wicket/java-lang-classnotfoundexception-org-slf4j-impl-staticloggerbinder/


1
นอกจากนี้สำหรับผู้ใช้ maven ฉันพบว่าฉันต้องการเพิ่มสิ่งต่อไปนี้ลงใน pom.xml ซึ่งนำ logback-core โดยอัตโนมัติ: <dependency> <groupId> ch.qos.logback </groupId> <artifactId> logback-classic </ artifactId> <version> 1.0.9 </version> </dependency>
พอล

2
This is not an error. This message tells you that you do not have any logger implementation (such as e.g. Logback) added in classpath, and therefore NOP (No Operation) log ค้นหาความคิดเห็น sarxosตามที่กล่าวถึงโดย @Paul จำเป็นต้องเพิ่ม logback-classic อีกวิธีหนึ่งในการเปลี่ยนแปลง<artifactId>slf4j-simple</artifactId>จาก<artifactId>slf4j-api</artifactId>การทำงานก็เช่นกัน มันเป็นตัวอย่างที่นี่
Abhijeet

10

SLF4j เป็นสิ่งที่เป็นนามธรรม สำหรับกรอบการเข้าสู่ระบบต่างๆ ดังนั้นนอกเหนือจากการมี slf4j คุณต้องรวมกรอบการบันทึกของคุณเช่น log4j หรือ logback (ฯลฯ ) ใน classpath ของคุณ
หากต้องการมีแนวคิดอ้างอิงขั้นตอนแรกของเด็กในhttp://logback.qos.ch/manual/introduction.html


2
การเพิ่มการล็อกกลับได้แก้ไขสิ่งนี้ให้ฉันแล้ว ฉันลด logback classic ล่าสุดลงใน pom (1.1.7) และมันล้มเหลวเนื่องจากการพึ่งพา slf4j เก่าเกินไป (1.6.2) ปรับลด logback เป็น 1.0.0 และปล่อยให้ slf4j ที่ 1.6.x ทำงานเช่นเดียวกับการอัพเกรด slf4j เป็น 1.7.20 และออกจาก logback ที่ 1.1.7
ECDragon

5

Slf4j เป็นส่วนหน้าสำหรับเฟรมเวิร์กการบันทึกข้อมูลพื้นฐานเช่น log4j, logback, java.util.logging

ในการเชื่อมต่อกับเฟรมเวิร์กพื้นฐาน slf4j ใช้การเชื่อม

  • log4j - slf4j-log4j12-1.7.21.jar
  • java.util.logging - slf4j-jdk14-1.7.21.jar เป็นต้น

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

สำหรับการพึ่งพา Maven

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

การพึ่งพานี้นอกเหนือจาก slf4j-log4j12-1.7.21.jar มันจะดึง slf4j-api-1.7.21.jar เช่นเดียวกับ log4j-1.2.17.jar ในโครงการของคุณ

อ้างอิง: http://www.slf4j.org/manual.html


ทางออกของคุณเป็นเพียงคนเดียวที่ได้ผลสำหรับฉันขอบคุณ!
Edenshaw

5

ฉันประสบปัญหาคล้ายกันกับแอพพลิเคชั่น Spring-boot-2 กับไลบรารี Java 9

การเพิ่มการพึ่งพาต่อไปนี้ใน pom.xml ของฉันแก้ไขปัญหาให้ฉันได้:

    <dependency>
        <groupId>com.googlecode.slf4j-maven-plugin-log</groupId>
        <artifactId>slf4j-maven-plugin-log</artifactId>
        <version>1.0.0</version>
    </dependency>

4

ในกรณี Websphere คุณมีเวอร์ชันเก่ากว่าของ slf4j-api.jar, 1.4.x หรือ 1.5.x อยู่รอบ ๆ พฤติกรรมที่คุณสังเกตเห็นบน tcServer ที่ล้มเหลวต่อ NOP เกิดขึ้นใน slf4j เวอร์ชั่น 1.6.0 และใหม่กว่า ตรวจสอบให้แน่ใจว่าคุณกำลังใช้ slf4j-api-1.6.x.jar บนแพลตฟอร์มทั้งหมดและไม่มีวางเวอร์ชันเก่ากว่าของ slf4j-api บนเส้นทางคลาส


ขอบคุณฉันได้ตรวจสอบ classpath ของ WebSphere 6.1 แล้วและฉันไม่เห็นรุ่นอื่น ๆ ของ slf4j เช่นฉันทำการค้นหาบนระบบไฟล์ WebSphere ของฉันสำหรับslf4j jar และฉันได้รับ 1.6 รุ่นที่ส่งคืนเท่านั้น คุณรู้หรือไม่ถ้า WebSphere มาพร้อมกับ slf4j
JJ180

มีอะไรที่เป็นไปได้ แต่ฉันรู้สึกประหลาดใจมากถ้า WebSphere มาพร้อมกับ slf4j-api ชุดเชื่อม slf4j-api.jar คุณใช้ Weld หรือไม่?
Ceki

4

ฉันได้รับปัญหานี้เมื่อฉันได้รับข้อผิดพลาดต่อไปนี้:

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-api-1.7.5.jarlibs

ทั้งๆที่ฉันพยายามกับขวดเติมเต็มปัญหาทั้งหมดเช่นslf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5ข้อผิดพลาดยังคงยืนกราน ในที่สุดปัญหาได้รับการแก้ไขเมื่อฉันเพิ่มลงslf4j-jdk14-1.7.5.jarใน libs java

รับแพ็คเกจ slf4j ทั้งหมดได้ที่http://www.slf4j.org/download.html


4

โปรดเพิ่มการอ้างอิงต่อไปนี้เพื่อ pom เพื่อแก้ไขปัญหานี้

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

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

ฉันเพิ่งรวมการพึ่งพาครั้งแรก - ตามที่ระบุไว้ในคำตอบอื่น - และมันใช้งานได้ การพึ่งพาทั้งสองไม่ได้แก้ปัญหาให้ฉัน
RubioRic

และต้องการใช้ Maven ท้องถิ่นแทน Bundled Maven ของ Intellij
Abdul Gaffar

4

เป็นทางเลือกแทนการรวม jar และโซลูชัน maven บริสุทธิ์คุณสามารถรวมจาก mavenด้วย gradle

ตัวอย่างสำหรับรุ่น 1.7.25

// https://mvnrepository.com/artifact/org.slf4j/slf4j-simple
api group: 'org.slf4j', name: 'slf4j-simple', version: '1.7.25'

วางสิ่งนี้ไว้ภายในการขึ้นต่อกันของbuild.gradleไฟล์ของคุณ


3

ฉันกำลังทำงานในโครงการ Struts2 + Spring ดังนั้นจึงจำเป็นต้องพึ่งพาslf4j-api-1.7.5.jarดังนั้นจึงจำเป็นต้องพึ่งพา

หากฉันดำเนินโครงการฉันได้รับข้อผิดพลาดเช่น

ไม่สามารถโหลดคลาส "org.slf4j.impl.StaticLoggerBinder"

slf4j-log4j12-1.7.5.jarฉันจะแก้ไขปัญหาของฉันโดยการเพิ่ม

ดังนั้นเพิ่ม jar นี้ในโครงการของคุณเพื่อแก้ไขปัญหา


3

ในฐานะที่เป็นรัฐSLF4J Manual

Simple Logging Facade สำหรับ Java (SLF4J) ทำหน้าที่เป็นซุ้มอย่างง่ายหรือนามธรรมสำหรับกรอบการบันทึกที่หลากหลายเช่น java.util.logging, logback และ log4j

และ

คำเตือนจะหายไปทันทีที่คุณเพิ่มการเชื่อมโยงไปยังคลาสของเส้นทาง

ดังนั้นคุณควรเลือกการเชื่อมโยงที่คุณต้องการใช้

NoOp ผูกพัน (slf4j-nop)

เข้าเล่ม NOP ทิ้งการบันทึกทั้งหมดอย่างเงียบ ๆ

ตรวจสอบเวอร์ชันใหม่ได้ที่https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav

การรวมแบบง่าย (slf4j-simple)

เอาต์พุตเหตุการณ์ทั้งหมดไปยัง System.err ข้อความของระดับ INFO และสูงกว่าเท่านั้นที่จะถูกพิมพ์ การรวมนี้อาจมีประโยชน์ในบริบทของแอปพลิเคชันขนาดเล็ก

ตรวจสอบเวอร์ชันใหม่ได้ที่https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav

การโยงสำหรับเฟรมเวิร์กการบันทึก (java.util.logging, logback, log4j)

คุณจำเป็นต้องมีหนึ่งในการผูกเหล่านี้ถ้าคุณจะเขียนบันทึกลงในไฟล์

ดูคำอธิบายและคำแนะนำได้ที่https://www.slf4j.org/manual.html#projectDep


ความคิดเห็นของฉัน

ฉันอยากจะแนะนำLogbackเพราะมันเป็นตัวตายตัวแทนของโครงการlog4j

ตรวจสอบความผูกพันเวอร์ชันล่าสุดได้ที่https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback-classic&core=gav

คุณได้รับเอาท์พุทของคอนโซลออกมาจากกล่อง แต่ถ้าคุณต้องการเขียนบันทึกลงในไฟล์เพียงแค่ใส่FileAppenderการกำหนดค่าไปยังsrc/main/resources/logback.xmlหรือไปที่src/test/resources/logback-test.xmlเช่นนี้:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/logs.log</file>

        <encoder>
            <pattern>%date %level [%thread] %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger level="DEBUG" name="com.myapp"/>
</configuration>

(ดูคำอธิบายโดยละเอียดในคู่มือ: https://logback.qos.ch/manual/configuration.html )


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

ใส่การอ้างอิงที่กล่าวถึงข้างต้นในไฟล์ pom.xml


แต่อย่าลืมตรวจสอบเวอร์ชั่นล่าสุด
user1053510

2

ฉันได้เพิ่มการพึ่งพานี้เพื่อแก้ไขปัญหานี้:

https://mvnrepository.com/artifact/org.slf4j/slf4j-simple/1.7.25

1

ตามเอกสารอย่างเป็นทางการของSLF4J

ไม่สามารถโหลดคลาส org.slf4j.impl.StaticLoggerBinder

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

เพียงเพิ่มjar นี้พร้อมกับ slf4j api.jar ไปยัง classpath ของคุณเพื่อทำสิ่งต่างๆให้เสร็จ ขอให้โชคดี



1

พบปัญหาเดียวกันใน payara 5.191

jcl-over-slf4j ร่วมกับ slf4j-log4j12 แก้ปัญหาได้

<properties>
  <slf4j.version>1.7.29</slf4j.version>
</properties>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>${slf4j.version}</version>
  <type>jar</type>
</dependency> 

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>${slf4j.version}</version>
</dependency>        

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>${slf4j.version}</version>
</dependency>

0

ฉันรู้ว่าโพสต์นี้เก่าไปหน่อย แต่ในกรณีที่คนอื่นประสบปัญหานี้:

เพิ่ม slf4j-jdk14-XXXjar ไปยัง CLASSPATH ของคุณ (โดย XXX คือหมายเลขรุ่น - เช่น slf4j-jdk14-1.7.5.jar)

HTH ปีเตอร์


1
คุณแนะนำว่าผู้ใช้ควรกลับไปใช้การบันทึก JDK1.4 เพื่อแก้ไขปัญหา classpath หรือไม่ ดูรายการคำถามที่พบบ่อยนี้: slf4j.org/faq.html#need_to_recompile
mwhs

0

ฉันใช้ Jena และฉันเพิ่มการพึ่งพาเพื่อนกับ pom.xml

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

ฉันพยายามเพิ่ม slf4j-simple แต่เพิ่งหายไป "SLF4J: ล้มเหลวในการโหลดคลาส“ org.slf4j.impl.StaticLoggerBinder”” ข้อผิดพลาด แต่ logback-classic แสดงข้อมูลรายละเอียดเพิ่มเติม

เอกสารอย่างเป็นทางการ


0

วิธีการแก้ปัญหาถูกระบุไว้ในเว็บไซต์ทางการ

ไม่สามารถโหลดคลาส org.slf4j.impl.StaticLoggerBinder

ข้อความเตือนนี้ถูกรายงานเมื่อไม่สามารถโหลดคลาส org.slf4j.impl.StaticLoggerBinder ในหน่วยความจำ สิ่งนี้เกิดขึ้นเมื่อไม่พบการรวม SLF4J ที่เหมาะสมบนเส้นทางคลาส การวางหนึ่ง (และหนึ่งเดียวเท่านั้น) ของ slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar หรือ logback-classic.jar บนคลาสพา ธ ควรแก้ปัญหา SINCE 1.6.0 ตั้งแต่ SLF4J เวอร์ชัน 1.6 ในกรณีที่ไม่มีการเชื่อมโยง SLF4J จะใช้ค่าเริ่มต้นเป็นการใช้งานตัวบันทึกการทำงานที่ไม่ดำเนินการ (NOP) หากคุณมีความรับผิดชอบในการทำแพ็กเกจแอปพลิเคชันและไม่สนใจเกี่ยวกับการบันทึกให้วาง slf4j-nop.jar บนคลาสพา ธ ของแอปพลิเคชันของคุณจะกำจัดข้อความเตือนนี้ โปรดทราบว่าส่วนประกอบที่ฝังตัวเช่นไลบรารีหรือกรอบงานไม่ควรประกาศการพึ่งพา SLF4J ใด ๆ ที่มีผลผูกพัน แต่ขึ้นอยู่กับ slf4j-api

วิธีการแก้ปัญหา: ฉันได้เพิ่มในโครงการของฉันโดยใช้การวิจัย Maven บน Intellij และฉันเลือก slf4j-jdk14.jar


0

ส่วนใหญ่มีแนวโน้มปัญหาของคุณได้เป็นเพราะ<scope>test</scope>(ในบางกรณียัง<scope>provided</scope>) เป็นที่กล่าวถึง@thangaraj

เอกสารอธิบายว่า:

ขอบเขตนี้บ่งชี้ว่าการพึ่งพาไม่จำเป็นสำหรับการใช้งานปกติของแอปพลิเคชันและจะพร้อมใช้งานสำหรับขั้นตอนการรวบรวมและการทดสอบเท่านั้น การทดสอบอ้างอิงไม่ใช่สกรรมกริยาและมีอยู่สำหรับการทดสอบและการเรียกใช้คลาสพา ธ เท่านั้น

ดังนั้นหากคุณไม่ต้องการการพึ่งพาเพื่อวัตถุประสงค์ในการทดสอบคุณสามารถใช้แทน (สิ่งที่คุณจะเห็นในmvnrepository ):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-nop</artifactId>
    <version>1.7.24</version>
    <scope>test</scope>
</dependency>

ไม่มีขอบเขตใด ๆ (โดยค่าเริ่มต้นจะเป็นการรวบรวมขอบเขตเมื่อไม่มีขอบเขตอื่นให้):

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
<dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
</dependency>

นี่เป็นเช่นเดียวกับ:

 <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->
 <dependency>  
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-nop</artifactId>
   <version>1.7.25</version>
   <scope>compile</scope>
 </dependency>

0

นี่คือ 5 เซนต์ของฉัน ...

ฉันมีปัญหาเดียวกันขณะทำการทดสอบ ดังนั้นฉันจึงแก้ไขโดยเพิ่มการใช้งานสำหรับการทดสอบรันไทม์เท่านั้น ฉันกำลังใช้ gradle สำหรับโครงการนี้

// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

กลุ่ม testRuntimeOnly: 'ch.qos.logback', ชื่อ: 'logback-classic', รุ่น: '1.2.3'


0

สำหรับฉันปัญหาคือ: การใช้ Hibernate ฉันเห็นว่ามันใช้ slf4j แล้วและอยู่ใน classpath ของฉันแล้วฉันจึงตัดสินใจใช้ ขั้นตอนต่อไป - เพิ่ม imlementor สำหรับ slf4j ดังนั้นฉันเพิ่มไปยัง maven:

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

แต่มันล้มเหลวพร้อมข้อผิดพลาด! SLF4J: โหลดคลาส“ org.slf4j.impl.StaticLoggerBinder” ไม่สำเร็จ

วิธีแก้คือ: การพึ่งพา Hibernate ของ slf4j เป็นเวอร์ชัน1.7.26และผมเพิ่มรุ่นรองพึ่งพา1.7.25 ดังนั้นเมื่อฉันแก้ไขสิ่งนี้ - ทั้งหมดก็โอเค


0

ฉันไม่ได้เพิ่มการพึ่งพาใด ๆ ฉันแค่เปลี่ยนวิธีที่ฉันบริโภคพวกเขา

ดูตัวอย่างรหัส

(ไม่ใส่หมายเหตุโค้ดนี้หากคุณใช้การค้นหาแบบยืดหยุ่น <7.0)

IndexRequest indexRequest = new IndexRequest(
  "twitter",
  "tweets",
  id // this is to make our consumer idempotent
).source(record.value(), XContentType.JSON);

รหัสปัจจุบัน

IndexRequest indexRequest = new IndexRequest("tweets")
  .source(record.value(), XContentType.JSON)
  .id(id); // this is to make our consumer idempotent

ฉันกำลังใช้การร้องขอเป็นกลุ่มและด้วยการที่ฉันลบข้อผิดพลาดนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.