SLF4J: Không tải được lớp “org.slf4j.impl.StaticLoggerBinder”. lỗi


115
  • Về Eclipse IDE ( Indigo , JunoKepler (phiên bản 32 và 64 bit))
  • Nền tảng : Windows , Ubuntu , Mac
  • phiên bản M2E : 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 ,
    1.4.0.20130601-0317

Thông tin chung

Lỗi trên xảy ra sau khi cập nhật m2e lên phiên bản 1.1. Bằng cách loại bỏ m2e 1.1 và quay trở lại m2e 1.0, mọi thứ đều hoạt động tốt. Tôi đã cố gắng lặp lại sự cố trong Windows và Ubuntu và nó cho tôi cùng một lỗi. Nhiều cấu hình của slf4j-api và logback đã được thử nghiệm nhưng dường như không có cấu hình nào hoạt động.

Lỗi xuất hiện trong bất kỳ dự án maven nào ngay cả khi không khai báo phụ thuộc slf4j .

  • Dự án Maven mới -> maven-archetype-quickstart

  • Dự án Maven mới -> Dự án đơn giản không có lựa chọn nguyên mẫu

    dẫn đến

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

Kiểm tra môi trường và cấu hình

Đã thử nghiệm với Eclipse Indigo và Eclipse Juno (cả 32 và 64 bit) trên Mac, 32 bit trên Ubuntu và 64 và 32 bit trên Windows. Đã kiểm tra các bản cài đặt mới của Juno Classic , Juno Modeling tools , Kepler Standard , Kepler Modeling Tools và cho ra lỗi tương tự.

Các xuất hiện lỗi với sạch , cài đặt , kiểm tra , triển khai , tạo-nguồn , Validate , biên dịch , gói , tích hợp kiểm tra , xác minh và kết hợp các mục tiêu sạch với các mục tiêu còn lại. Nó cũng xuất hiện với các tham số -e-X . Đã có nỗ lực xóa kho lưu trữ m2e và tải xuống từ đầu nhưng không thành công. Tôi nên đề cập rằng nó đã được thử nghiệm trong 3 máy khác nhau và hộp ảo tất cả các hệ thống trên nhưng nó tạo ra cùng một lỗi.

Thử tất cả khác nhau logback cấu hình (từ 1.0.4 đến 1.0.13) quyết tâm rằng slf4j-apilogback lõi phụ thuộc, nhưng tất cả các sản phẩm cùng một lỗi:

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

Đã thử tất cả các cấu hình slf4j-simple khác nhau (từ 1.6.1 đến 1.7.5) .

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

Đã thử tất cả các cấu hình log4j-over-slf4j khác nhau (từ 1.6.1 đến 1.7.5) .

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

Đã thử tất cả các cấu hình slf4j-jdk14 khác nhau (từ 1.6.1 đến 1.7.5) .

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

Đã thử tất cả các cấu hình slf4j-log4j12 khác nhau (từ 1.6.1 đến 1.7.5) .

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

Đã thử cấu hình slf4j-nop 1.7.5 .

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

Cuối cùng nhưng không kém phần quan trọng, các bản ghi được lưu và in mặc dù có lỗi.


Các cách để tái tạo lỗi

  • Tải xuống Eclipse Juno, Indigo hoặc Kepler 32 hoặc 64 bit (Tất cả các cài đặt sẽ gây ra cùng một lỗi).

    • Cài đặt m2e - Tích hợp Maven cho Eclipse

      HOẶC LÀ

    • Cập nhật phiên bản M2E của bạn để 1.1.0.20120530-0009 , hoặc 1.2.0.20120903-1050 , hoặc 1.3.0.20130129-0926 , hoặc 1.4.0.20130601-0317 )


    • Chọn
      Tệp-> Mới-> Khác-> Dự án Maven-> Nhấp vào Tiếp theo-> Chọn maven-archetype-quickstart từ danh mục-> Kết thúc

      HOẶC LÀ

    • Chọn Tệp-> Mới-> Khác-> Dự án Maven-> Nhấp vào Tiếp theo-> Chọn Tạo một dự án đơn giản (bỏ qua lựa chọn kiểu mẫu) -> Hoàn thành thông tin Tạo tác-> Kết thúc

  • Nhấp chuột phải vào dự án-> Chạy dưới dạng-> cài đặt sạch (hoặc bất kỳ mục tiêu nào khác được đề cập ở trên)

Dòng đầu tiên trên bảng điều khiển sẽ là

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.

Các dự án hiện tại PS sẽ tạo ra các lỗi tương tự sau khi cập nhật phiên bản M2E để 1.1.0.20120530-0009 , 1.2.0.20120903-1050 , 1.3.0.20130129-0926 , 1.4.0.20130601-0317


Cập nhật

BIÊN TẬP

trang web hỗ trợ m2e:

  • Câu hỏi trên đã được đăng dưới dạng một lỗi trong trang web hỗ trợ m2e và câu trả lời từ Igor Fedorenko là

    Không có kế hoạch ngay lập tức để ngăn chặn thông điệp này.

    Để xem lỗi trên, vui lòng tham khảo trang web hỗ trợ chính thức của m2e


CHỈNH SỬA 2

  • Các dấu hiệu báo lỗi trên là hiện tại cũng để M2E phiên bản 1.2.0.20120903-1050


CHỈNH SỬA 3

  • Các dấu hiệu báo lỗi trên là hiện tại cũng để M2E phiên bản 1.3.0.20130129-0926


CHỈNH SỬA 4

  • Các dấu hiệu báo lỗi trên là hiện tại cũng để M2E phiên bản 1.4.0.20130601-0317


CHỈNH SỬA 5

                              ***Reported FIXED***

@EliranMalka Nó dài nhưng có lý do. Cố gắng giúp mọi người tránh hỏi những câu hỏi giống nhau và bao gồm mọi chi tiết có vẻ cần thiết để hiểu liệu họ có đang đối mặt với cùng một vấn đề không đã cho tôi quá nhiều lựa chọn. :-)
Konstantinos Margaritis

Tôi gặp lỗi này khi cố gắng sử dụng dữ liệu mùa xuân với neo4j, tôi có slf4jtrong cả hai slf4j-api-1.7.7jcl-over-slf4j-1.7.7và nếu tôi cố xóa bất kỳ ai trong số họ, tôi nhận được thông báo lỗi nói rằng Loggerlớp của họ bị thiếu. Tôi nên làm gì?
user1885868

@KonstantinosMargaritis bạn có thể vui lòng cho biết cách khắc phục điều này với pom.xml không, tôi có thể làm cho nó hoạt động khi thiết lập cục bộ nhưng trên jenkins nó luôn không thành công.
vikramvi

Thiết lập hiện tại của bạn @vikramvi là gì?
Konstantinos Margaritis

@KonstantinosMargaritis cảm ơn bạn đã lấy lại thông tin này. Tôi nhận ra maven là phiên bản 3.0 trên Linux được nâng cấp lên phiên bản mới nhất và đã thử lại. điều này đã khắc phục sự cố. Nhưng đã phải dành cả ngày để cố gắng tìm ra những gì có thể sai. Dù sao đi nữa cũng xin cám ơn.
vikramvi

Câu trả lời:


75

Tôi cũng có thể xác nhận lỗi này.

Cách giải quyết: là sử dụng maven bên ngoài bên trong m2eclipse, thay vì maven nhúng.

Điều đó được thực hiện trong ba bước:

1 Cài đặt maven trên máy cục bộ ( máy thử nghiệm là Ubuntu 10.10)

mvn --version

Apache Maven 2.2.1 (rdebian-4) Phiên bản Java: 1.6.0_20 Trang chủ Java: / usr / lib / jvm / java-6-openjdk / jre Ngôn ngữ mặc định: de_DE, mã hóa nền tảng: UTF-8 Tên hệ điều hành: "linux" phiên bản: "2.6.35-32-generic" Arch: "amd64" Họ: "unix"

2 Chạy maven liên kết bên ngoài cách chạy maven từ bảng điều khiển

> 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 bên trong m2eclipse: chuyển từ maven nhúng sang maven cục bộ

  • tìm hiểu địa chỉ cài đặt local maven home ở đâu ( mvn --versionhoặc google cho của bạn MAVEN_HOME, đối với tôi, điều này đã giúp tôi đó là /usr/share/maven2)
  • trong Menu eclipse-> Window-> Preferences-> Maven-> Install-> nhập chuỗi đó. Sau đó, bạn nên chuyển sang maven bên ngoài mới của mình.
  • sau đó chạy Dự án của bạn, ví dụ như "maven test".

Thông báo lỗi sẽ biến mất.


1
Tôi chấp nhận câu trả lời của bạn vì đó là cách giải quyết duy nhất để bỏ qua lỗi khó chịu. Cảm ơn bạn rất nhiều cho câu trả lời phân tích của bạn. :) ..
Konstantinos Margaritis

3
hmm Tôi đang sử dụng Windows và đã thay đổi sang cài đặt bên ngoài mới, tuy nhiên lỗi vẫn tồn tại !?
stefan.at.wpf

4
xin lỗi, nó hoạt động. Lưu ý rằng có một tùy chọn cho thời gian chạy maven (nội bộ / bên ngoài) trên các cấu hình chạy. vì vậy nếu bạn sử dụng một cái đã lưu, hãy đảm bảo cập nhật nó.
stefan.at.wpf

@ stefan.at.wpf Rất vui khi biết rằng nó hoạt động. Nếu muốn, bạn có thể đăng ký trong danh sách gửi thư của lỗi và bạn có thể nhận được thông báo trong trường hợp có gì đó thay đổi.
Konstantinos Margaritis

2
Đối với tôi, #mvn --versionthật tiện lợi để hiển thị MAVEN_HOME.
biaobiaoqi

25

Có một tài liệu trong trang SLf4J để giải quyết vấn đề này. Tôi đã làm theo điều đó và thêm slf4j-simple-1.6.1.jar vào ứng dụng của mình cùng với slf4j-api-1.6.1.jar mà tôi đã có.

slf4j


4
điều này hoạt động, trong maven có thể thêm: <dependency> <groupId> org.slf4j </groupId> <artifactId> slf4j-simple </artifactId> <version> 1.XX </version> </dependency> // Chỉ cần thay thế bằng phiên bản của bạn
Enrique San Martín

@Mohammed Irfan, tôi có thể cần thêm haijar này vào thư mục libs trong eclipse không?
Erum

1
Tôi đang sử dụng một phiên bản sau của Maven và đã làm theo các bước trên, nhưng đây là câu trả lời mà gây ra vấn đề này ra đi - nhờ :)
Rob Wilson

15

Nếu bạn đang sử dụng Gradle, hãy thêm cái này:

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

Nó hoạt động ở đây với Gradle !! Bạn có thể giải thích điều gì xảy ra khi chúng tôi thêm thư viện đó không?
Felipe Pereira

5

Gặp lỗi tương tự với cùng kết quả với Gradle và có thể giải quyết nó bằng cách sau:

//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'

Dòng ngoài nhận xét là dòng gây ra lỗi đầu ra. Tôi tin rằng bạn có thể chuyển cái này cho Maven.


3

Bạn chưa chỉ định phiên bản trong tệp phụ thuộc maven của mình có thể là lý do tại sao nó không chọn jar mới nhất
Cũng như bạn cần một phụ lục khác với slf4j-log4j12id tạo tác.
Bao gồm cái này trong tệp pom của bạn

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

Hãy cho tôi biết nếu lỗi vẫn chưa được giải quyết
Tôi cũng khuyên bạn nên xem liên kết này


3
Tất cả các phiên bản đã nêu đã được kiểm tra. Tôi đã không khai báo nó ở đó để tránh lặp lại. Thẻ để trống có chủ ý. Vui lòng thấy rằng vấn đề ở trên đã được đăng dưới dạng lỗi trên trang web hỗ trợ m2e và không có cách nào để giải quyết lỗi trên trừ khi được các nhà phát triển m2e hỗ trợ. Tôi đã đọc trang web nhiều lần và tôi đã đưa vào tất cả các thư viện có thể giải quyết vấn đề. Thật không may, không có cấu hình nào hoạt động vì nó liên quan đến m2e hơn là các phụ thuộc đã khai báo. Lỗi trên không hiển thị trong bảng điều khiển maven hoặc Netbeans.ONLY trong Eclipse.
Konstantinos Margaritis

1
slf4j-log4j12 là một ràng buộc khác cùng với slf4j-simple, slf4j-jdk14 và logback-classic. Bất kỳ phụ thuộc nào ở trên đáng lẽ đã giải quyết được vấn đề với ràng buộc. Như tôi đã giải thích trước đó, vấn đề là với m2e. Dẫu sao cũng xin cảm ơn.
Konstantinos Margaritis

3

Dán mã này vào tệp pom.xml của bạn. Nó làm việc cho tôi.

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

Nó giải quyết lỗi “org.slf4j.impl.StaticLoggerBinder”, nhưng bây giờ đang ghi lại mọi thứ, tôi đặt log4j.xml và log4j.properties (mỗi lần một) trong src / test / resources, hiện tại tất cả các khung trong dự án của tôi đều đang ghi tấn tin nhắn ngoại trừ hồ sơ của riêng tôi.
OJVM

1

Đã xem xét kỹ vấn đề đã nổi lên. Tin rằng đây sẽ là một bài đọc hay cho những người khác đến đây với cùng một vấn đề:

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


vui lòng cung cấp câu trả lời đầy đủ, không chỉ là một liên kết.
slfan

@Prince Nếu bạn đọc mô tả câu hỏi, bạn có thể tìm thấy một phần có nội dung "Để xem lỗi ở trên, vui lòng tham khảo trang web hỗ trợ chính thức của m2e" trỏ đến url mà bạn đã đề cập.
Konstantinos Margaritis,

Oops .. My bad. Lời xin lỗi chân thành!
Prince

1

Tôi đã gặp sự cố tương tự đối với ứng dụng Spring Boot - Gradle đang chạy trên Eclipse Luna. Tôi có thể giải quyết nó bằng cách thêm thủ công một mục nhập trong .classpath của dự án của tôi

<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"/>

Ý tưởng là làm theo giải pháp này . Nhưng thực hiện như thế nào là tùy từng trường hợp. Một cách khắc phục là cách mà tôi đã sử dụng ở trên.

Hi vọng điêu nay co ich.


0

Đây không phải là một thông báo lỗi mà là một cảnh báo. Nó được giải thích rất rõ ràng trong trang web của họ như:

Cảnh báo này, tức là không phải lỗi, thông báo được báo cáo khi không tìm thấy nhà cung cấp SLF4J nào trên đường dẫn lớp. Đặt một (và chỉ một) trong số slf4j-nop.jar slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jar hoặc logback-classic.jar trên đường dẫn lớp sẽ giải quyết được vấn đề. Lưu ý rằng các nhà cung cấp này phải nhắm mục tiêu slf4j-api 1.8 trở lên.

Trong trường hợp không có nhà cung cấp, SLF4J sẽ mặc định là nhà cung cấp trình ghi nhật ký không hoạt động (NOP).

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


0

Tôi đã gặp vấn đề tương tự khi viết chương trình nhà sản xuất Kafka bằng java. Lỗi này xảy ra do thư viện slf4j sai. sử dụng phụ thuộc slf4j-simple maven dưới đây sẽ khắc phục sự cố của bạn.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.1</version>
    <scope>test</scope>
</dependency>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.