SLF4J: Không thể tải lớp org org.slf4j.impl.StaticLoggerBinder xỉ


619

Ứng dụng của tôi sẽ được triển khai trên cả tcServer và WebSphere 6.1. Ứng dụng này sử dụng ehCache và do đó yêu cầu slf4j làm phụ thuộc. Kết quả là tôi đã thêm jar slf4j-api.jar (1.6) vào gói tệp chiến tranh của mình.

Ứng dụng hoạt động tốt trong tcServer ngoại trừ lỗi sau:

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.

Tuy nhiên, khi tôi triển khai trong WebSphere, tôi nhận được một java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder.

Cũng kèm theo Failed to load class "org.slf4j.impl.StaticMDCBinder"

Tôi đã kiểm tra các đường dẫn lớp của cả hai máy chủ ứng dụng và không có bình slf4j nào khác.

Có ai có bất kỳ ý tưởng những gì có thể xảy ra ở đây?


Bài viết này đã giải quyết vấn đề của tôi
Kế toán م

Câu trả lời:


517

Tôi đã có cùng một vấn đề với WebSphere 6.1. Như Ceki đã chỉ ra, có rất nhiều lọ mà WebSphere đang sử dụng và một trong số chúng đang chỉ vào một phiên bản cũ hơn của slf4j.

Dự phòng No-Op chỉ xảy ra với slf4j -1.6+, vì vậy bất cứ điều gì cũ hơn sẽ gây ra ngoại lệ và tạm dừng triển khai của bạn.

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

Điều này đã giải quyết vấn đề của tôi. Hy vọng nó sẽ giúp những người khác có vấn đề này.


4
Có, lỗi xảy ra như đã đề cập ở đây - slf4j.org/manual.html Nhưng tôi nhận được một lỗi mới ngay bây giờ - Nguyên nhân bởi: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
david blaine

1
"Như Ceki đã chỉ ra, có rất nhiều lọ mà WebSphere đang sử dụng và một trong số chúng đang chỉ vào một phiên bản cũ hơn của slf4j." - Rất nhiều cho Maven chăm sóc phụ thuộc! Thật là một câu chuyện hài hước.
AndroidDev


2
Tôi đang sử dụng 1.7 và có cùng một vấn đề. Tôi thêm slf4j-simple-1.7.jar và bây giờ vấn đề đã được giải quyết.
littletiger

1
Điều này không làm việc cho tôi. Bình đơn giản slf4j không nhận log4j.properies. Thay vào đó, tôi sử dụng việc thực hiện bằng cách thêm slf4j-log4j12 và log4j jar, hoạt động tốt cho tôi.
flyrain 14/2/19

379

Điều này là dành cho những người đến đây từ tìm kiếm google.

Nếu bạn sử dụng maven, chỉ cần thêm vào như sau

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

Hoặc là

   <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
Có một lý do cho việc slf4j-simplekhông phải là phiên bản giống như slf4j-api? Họ có thể sẽ làm việc tốt với nhau, nhưng tôi nghĩ rằng nói chung là an toàn hơn và thực tế tốt hơn là cho họ sử dụng cùng một phiên bản. Ngoài ra, nếu bạn cần kích hoạt ghi nhật ký chỉ bàn điều khiển, ví dụ, khi chạy thử nghiệm đơn vị, thì slf4j-simpledường như là đủ (mặc dù vậy đối với tôi).
Ivaylo Slavov

22
AFAIK bạn chỉ nên có 1 impl của slf4j, tức là slf4j-log4j12 HOẶC slf4j-đơn giản, không phải cả hai.
Ondra ižka

@Igor KatKov điều này chỉ hoạt động trên máy cục bộ nhưng gặp lỗi tương tự trên Jenkins không chắc chắn điều gì đang xảy ra. bạn có thể vui lòng làm rõ
vikramvi

slf4j-api yêu cầu cấu hình không khả dụng khi bạn chạy lần đầu tiên (và chưa chỉnh sửa bất kỳ tệp cấu hình nào). Sử dụng slf4j-Simple sẽ cho phép bạn sử dụng Logger cơ bản mà không cần cấu hình bất kỳ tệp nào ngoài WYSIWYG. Sau đó, bạn có thể quay lại slf4j-api sau khi bạn đã học cách định cấu hình các tệp và tùy chỉnh đầu ra Logger theo cách bạn muốn. (Vẫn đang học ở nơi có và cách tự chỉnh sửa chúng)
chrips

53

Chỉ cần thêm phần này vào tệp pom.xml của bạn :

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

3
Giải pháp làm việc cho tôi; Rất đáng để chỉ vào tài liệu (nơi tôi tìm thấy lỗi được giải thích): slf4j.org/codes.html#StaticLoggerBinder
Witold Kaczurba

2
không có gì khác ngoài việc này hiệu quả với tôi khi chạy một ví dụ về nhà sản xuất kafka đơn giản. Cảm ơn nhiều!
Viren

@WitoldKaczurba nói đúng. Tôi đã có cùng một vấn đề trong khi sử dụng phụ thuộc bằng cách sử dụng maven. Tôi vừa googled và đi đến slf4j.org/codes.html#StaticLoggerBinder trong đó nêu vấn đề và giải pháp của nó. Tôi đã sử dụng slf4j-api phiên bản 1.7.25. Sau khi kiểm tra tài liệu về liên kết được đề cập, tôi chỉ sử dụng <phụ thuộc> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.25</version> </dependency>và vấn đề đã được giải quyết
Mohammad Anas

Tôi không hiểu quan điểm của việc sử dụng Maven nếu các thư viện cần một số logger (ví dụ: Tay cầm cần slf4j) không khai báo nó trong pom của họ. Dù sao thì cũng cám ơn bạn.
Eric Duminil

Trong trường hợp của tôi, đây không phải là giải pháp. Nó chỉ ẩn thông tin, rằng có các phiên bản không tương thích của slf4j và log4j hoặc một plugin khác.
hariprasad

42

Bạn cần thêm tệp jar sau trong classpath của mình : slf4j-simple-1.6.2.jar. Nếu bạn không có nó, xin vui lòng tải nó. Vui lòng tham khảo http://www.slf4j.org/codes.html#mult Môn_bindings


Nhưng tôi không có bình đó trên đường dẫn tcServer của mình, đó là điều khiến tôi bối rối. Tôi không hiểu làm thế nào tôi không cần một bình bổ sung trong tcServer nhưng làm trong WebSphere
JJ180

1
Làm việc cho tôi, và đơn giản hơn nhiều so với câu trả lời được chấp nhận. Phiên bản 1.7.7 cũng hoạt động.
La-comadreja

1
Tôi đã có jul-to-slf4jtrong tôi pom.xmlvà chỉ cần thêm slf4j-simplevào trước đó và nó hoạt động tốt.
slugmandrew

Làm thế nào để chỉ cần thêm tệp jar vào đường dẫn?
Dean013

Xin vui lòng, bạn có thể giải thích cho tôi con đường lớp là gì? ở đâu? Tôi không hiểu
Rose8525

36

Khá nhiều câu trả lời ở đây khuyên bạn nên thêm phụ thuộc đơn giản slf4j vào tệp maven pom của bạn. Bạn có thể muốn kiểm tra phiên bản mới nhất.

Tại https://mvnreposective.com/artifact/org.slf4j/slf4j-simple bạn sẽ tìm thấy phiên bản mới nhất của Binding đơn giản SLF4J. Chọn một bộ phù hợp nhất với bạn (vẫn là 1.7,26 từ 2019-02 là phiên bản ổn định kể từ 2019-07) và đưa nó vào tệp pom.xml của bạn.

Để thuận tiện cho bạn, một số phụ thuộc được hiển thị ở đây - nhưng chúng có thể không được cập nhật khi bạn đọc điều này!

Phiên bản Alpha 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>

Phiên bản Beta tháng 2 năm 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>

Phiên bản ổn định 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>

Tôi đã loại bỏ phần kiểm tra phạm vi nhờ vào bình luận bên dưới.


6
tại sao bạn sử dụng <scope>test</scope>? Theo kinh nghiệm của tôi, tôi ít nhất cần runtimephạm vi để đảm bảo slf4j-simplelà trên đường dẫn lớp. Tò mò làm thế nào bạn có được điều này để làm việc chỉ với testphạm vi ...
ecoe

Cảm ơn bạn đã chỉ ra điều này. Tôi loại bỏ thẻ phạm vi từ câu trả lời của tôi cho phù hợp. Đó là sự cố cắt & dán - liên kết tôi đang cung cấp cung cấp phụ thuộc beta theo cách này.
Wolfgang Fahl

27

Tôi đã phải đối mặt với lỗi tương tự. Tôi đã cấu hình slf4j-api, slf4j-log4j12 và log4j, trong sự phát triển cục bộ của tôi. Tất cả các cấu hình đều ổn, nhưng phụ thuộc slf4j-log4j12 mà tôi đã sao chép từ mvnreposeective có phạm vi kiểm tra <scope>test</scope>. Khi tôi loại bỏ điều này mọi thứ đều ổn.

Một số lần sai lầm ngớ ngẩn phá vỡ đầu của chúng tôi;)


1
Cảm ơn rất nhiều! Tôi có vấn đề tương tự và chuẩn bị từ bỏ cho đến khi tôi tìm thấy bài viết của bạn!
Ergodyne

1
Điều này cũng giúp tôi
cod3min3

27

Thỉnh thoảng chúng ta nên xem ghi chú từ cảnh báo SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details..

Điều này xảy ra khi không tìm thấy liên kết SLF4J thích hợp trên đường dẫn lớp

Bạn có thể tìm kiếm lý do tại sao cảnh báo này đến.
Thêm một trong những jar từ *slf4j-nop.jar, slf4j-simple.jar, slf4j-log4j12.jar, slf4j-jdk14.jarhoặc logback-classic.jar*vào đường dẫn lớp nên giải quyết vấn đề.

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

ví dụ thêm mã ở trên vào mã của bạn build.gradlehoặc mã tương ứng pom.xmlcho dự án maven.


15

Đặt tập tin slf4j-log4j12-1.6.4.jarvào classpath sẽ thực hiện thủ thuật.


6
hoặc thêm phụ thuộc vào pom <phụ thuộc> <groupId> org.slf4j </ groupId> <artifactId> slf4j-log4j12 </ artifactId> </ lệ thuộc>
enkor

11

Nếu bạn đang sử dụng maven để quản lý phụ thuộc, do đó bạn chỉ có thể thêm phụ thuộc sau vào pom.xml

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

Đối với người dùng không phải là Maven Chỉ cần tải xuống thư viện và đặt nó vào đường dẫn dự án của bạn.

Tại đây bạn có thể xem chi tiết: http://www.mkyong.com/wicket/java-lang-groupnotfoundexception-org-slf4j-impl-staticloggerbinder/


1
Ngoài ra, đối với người dùng maven, tôi thấy rằng tôi cần thêm phần sau vào pom.xml, điều này cũng tự động mang lại logback-core: <lệ thuộc> <groupId> ch.qos.logback </ groupId> <artifactId> logback-classic </ artifactId> <phiên bản> 1.0.9 </ phiên bản> </ phụ thuộc>
Paul

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 Tìm kiếm bình luận sarxos như được đề cập bởi @Paul cần thêm logback-classic. Một cách tiếp cận khác để thay đổi <artifactId>slf4j-simple</artifactId>từ <artifactId>slf4j-api</artifactId>cũng làm công việc. Nó được minh họa ở đây
Abhijeet

10

SLF4j là một bản tóm tắt cho các khung đăng nhập khác nhau . Do đó, ngoài việc có slf4j, bạn cần bao gồm bất kỳ khung đăng nhập nào như log4j hoặc logback (vv) trong đường dẫn lớp của bạn.
Để có ý tưởng, hãy tham khảo Bước đầu tiên của bé trong http://logback.qos.ch/manual/int sinhtion.html


2
Thêm logback đã sửa lỗi này cho tôi. Tôi đã bỏ bản logback classic mới nhất vào pom (1.1.7) và nó đã thất bại vì sự phụ thuộc slf4j quá cũ (1.6.2). Việc hạ cấp logback xuống 1.0.0 và để slf4j ở mức 1.6.x hoạt động, cũng như nâng cấp slf4j lên 1.7.20 và để lại logback ở 1.1.7.
ECDragon

5

Slf4j là một mặt tiền cho các khung đăng nhập cơ bản như log4j, logback, java.util.logging.

Để kết nối với các khung cơ bản, slf4j sử dụng một ràng buộc.

  • log4j - slf4j-log4j12-1.7.21.jar
  • java.util.logging - slf4j-jdk14-1.7.21.jar, v.v.

Các lỗi trên được ném nếu jar liên kết bị bỏ lỡ. Bạn có thể tải về jar này và thêm nó vào classpath.

Đối với phụ thuộc maven,

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

Sự phụ thuộc này ngoài slf4j-log4j12-1.7.21.jar, nó sẽ kéo slf4j-api-1.7.21.jar cũng như log4j-1.2.17.jar vào dự án của bạn

Tham khảo: http://www.slf4j.org/manual.html


Giải pháp của bạn là người duy nhất làm việc cho tôi, cảm ơn!
Edenshaw

5

Tôi đã phải đối mặt với vấn đề tương tự với các ứng dụng Spring-boot-2 với thư viện Java 9.

Việc thêm phụ thuộc sau vào tệp pom.xml của tôi đã giải quyết vấn đề cho tôi:

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

4

Trong trường hợp Websphere, bạn có phiên bản cũ hơn của slf4j-api.jar, 1.4.x. hoặc 1.5.x nằm quanh một nơi nào đó. Hành vi bạn quan sát trên tcServer, không thành công với NOP, xảy ra trên các phiên bản slf4j 1.6.0 trở lên. Đảm bảo rằng bạn đang sử dụng slf4j-api-1.6.x.jar trên tất cả các nền tảng và không có phiên bản cũ nào của slf4j-api được đặt trên đường dẫn lớp.


Cảm ơn, tôi đã kiểm tra đường dẫn lớp WebSphere 6.1 của tôi và tôi không thấy bất kỳ phiên bản nào khác của slf4j, ví dụ: tôi đã tìm kiếm trên hệ thống tệp WebSphere của mình cho jar slf4j và tôi chỉ nhận được phiên bản 1.6 của mình. Bạn có biết WebSphere được đóng gói với slf4j không?
JJ180

Bất cứ điều gì cũng có thể nhưng tôi sẽ rất ngạc nhiên nếu WebSphere đi kèm với slf4j-api. Hàn bó slf4j-api.jar. Bạn đang sử dụng Weld?
Ceki

4

Tôi gặp vấn đề này khi gặp lỗi sau:

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.

khi tôi còn sử dụng slf4j-api-1.7.5.jartrong tôi libs.

Inspite tôi đã thử với toàn bộ lọ bổ sung được đề xuất, như slf4j-log4j12-1.7.5.jar, slf4j-simple-1.7.5thông báo lỗi vẫn tồn tại. Vấn đề cuối cùng đã được giải quyết khi tôi thêm vào slf4j-jdk14-1.7.5.jarjava libs.

Nhận toàn bộ gói slf4j tại http://www.slf4j.org/doad.html


4

Vui lòng thêm các phụ thuộc sau vào pom để giải quyết vấn đề này.

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

Tôi chỉ bao gồm sự phụ thuộc đầu tiên - như được chỉ ra trong một câu trả lời khác - và nó hoạt động. Cả hai phụ thuộc không giải quyết vấn đề cho tôi.
RubioRic

Và muốn sử dụng maven địa phương thay vì maven của Intellij.
Abdul Gaffar

4

Thay thế cho các giải pháp bao gồm jar và maven thuần túy, bạn có thể đưa nó từ maven với gradle.

Ví dụ cho phiên bản 1.7.25

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

Đặt điều này trong các phụ thuộc của build.gradletập tin của bạn .


3

Tôi đang làm việc trong một dự án Struts2 + Spring. Vì vậy, nó cần một sự phụ thuộc slf4j-api-1.7.5.jar.

Nếu tôi chạy dự án, tôi gặp lỗi như

Không thể tải lớp "org.slf4j.impl.StaticLoggerBinder"

Tôi đã giải quyết vấn đề của mình bằng cách thêm slf4j-log4j12-1.7.5.jar.

Vì vậy, thêm bình này trong dự án của bạn để giải quyết vấn đề.


3

Như Manual SLF4J bang

Mặt tiền ghi nhật ký đơn giản cho Java (SLF4J) đóng vai trò là mặt tiền đơn giản hoặc trừu tượng hóa cho các khung ghi nhật ký khác nhau, chẳng hạn như java.util.logging, logback và log4j.

Cảnh báo sẽ biến mất ngay sau khi bạn thêm một ràng buộc vào đường dẫn lớp của bạn.

Vì vậy, bạn nên chọn ràng buộc nào bạn muốn sử dụng.

Liên kết NoOp (slf4j-nop)

Ràng buộc cho NOP, âm thầm loại bỏ tất cả đăng nhập.

Kiểm tra phiên bản mới tại https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-nop&core=gav

Liên kết đơn giản (slf4j-đơn giản)

xuất tất cả các sự kiện cho System.err. Chỉ các tin nhắn cấp INFO trở lên được in. Ràng buộc này có thể hữu ích trong bối cảnh của các ứng dụng nhỏ.

Kiểm tra phiên bản mới tại https://search.maven.org/search?q=g:org.slf4j%20AND%20a:slf4j-simple&core=gav

Các ràng buộc cho các khung đăng nhập (java.util.logging, logback, log4j)

Bạn cần một trong những ràng buộc này nếu bạn định ghi nhật ký vào một tệp.

Xem mô tả và hướng dẫn tại https://www.slf4j.org/manual.html#projectDep


Ý kiến ​​cá nhân của tôi

Tôi muốn giới thiệu Logback vì nó là sự kế thừa cho dự án log4j .

Kiểm tra phiên bản mới nhất của ràng buộc cho nó tại https://search.maven.org/search?q=g:ch.qos.logback%20AND%20a:logback- classic & core = gav

Bạn nhận được đầu ra giao diện điều khiển ra khỏi hộp nhưng nếu bạn cần ghi nhật ký vào tệp, chỉ cần đặt FileAppendercấu hình vào src/main/resources/logback.xmlhoặc src/test/resources/logback-test.xmlnhư thế này:

<?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>

(Xem mô tả chi tiết trong hướng dẫn sử dụng: https://logback.qos.ch/manual/configuration.html )


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

Đặt phần phụ thuộc được đề cập ở trên vào tệp pom.xml


Nhưng hãy nhớ kiểm tra phiên bản mới nhất.
dùng1053510

2

Tôi đã thêm phụ thuộc này để giải quyết vấn đề này:

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

1

Theo tài liệu chính thức của SLF4J

Không thể tải lớp org.slf4j.impl.StaticLoggerBinder

Thông báo cảnh báo này được báo cáo khi lớp org.slf4j.impl.StaticLoggerBinder không thể được tải vào bộ nhớ. Điều này xảy ra khi không tìm thấy liên kết SLF4J thích hợp trên đường dẫn lớp. Đặt một (và chỉ một) 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 vấn đề.

Chỉ cần thêm jar này cùng với slf4j api.jar vào đường dẫn lớp của bạn để hoàn thành công việc. May mắn nhất



1

gặp vấn đề tương tự trên payara 5.191

jcl-over-slf4j cùng với slf4j-log4j12 đã giải quyết vấn đề

<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

Tôi biết bài đăng này hơi cũ, nhưng trong trường hợp có ai khác gặp phải vấn đề này:

Thêm slf4j-jdk14-XXXjar vào CLASSPATH của bạn (trong đó XXX là số phiên bản - ví dụ: slf4j-jdk14-1.7.5.jar).

HTH Peter


1
Bạn có gợi ý rằng người dùng nên hoàn nguyên việc ghi nhật ký JDK1.4 để giải quyết vấn đề về đường dẫn không? Ngoài ra, hãy xem mục Câu hỏi thường gặp này: slf4j.org/faq.html#need_to_recompile
mwhs

0

Tôi sử dụng Jena và tôi thêm sự phụ thuộc đồng hành vào pom.xml

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

Tôi cố gắng thêm slf4j-đơn giản nhưng nó chỉ biến mất "SLF4J: Không thể tải lớp lớp org org.slf4j.impl.StaticLoggerBinder tựa" nhưng logback-classic hiển thị thông tin chi tiết hơn.

Các tài liệu chính thức


0

giải pháp được chỉ định trên trang web chính thức của họ:

Không thể tải lớp org.slf4j.impl.StaticLoggerBinder

Thông báo cảnh báo này được báo cáo khi lớp org.slf4j.impl.StaticLoggerBinder không thể được tải vào bộ nhớ. Điều này xảy ra khi không tìm thấy liên kết SLF4J thích hợp trên đường dẫn lớp. Đặt một (và chỉ một) 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 vấn đề. SINCE 1.6.0 Kể từ phiên bản SLF4J 1.6, trong trường hợp không có ràng buộc, SLF4J sẽ mặc định thực hiện trình ghi nhật ký không hoạt động (NOP). Nếu bạn chịu trách nhiệm đóng gói một ứng dụng và không quan tâm đến việc đăng nhập, thì việc đặt slf4j-nop.jar trên đường dẫn lớp của ứng dụng của bạn sẽ thoát khỏi thông báo cảnh báo này. Lưu ý rằng các thành phần nhúng như thư viện hoặc khung không nên khai báo một phụ thuộc vào bất kỳ ràng buộc SLF4J nào mà chỉ phụ thuộc vào slf4j-api.

Giải pháp: Tôi đã thêm vào dự án của mình bằng nghiên cứu maven trên intellij và tôi đã chọn slf4j-jdk14.jar.


0

Nhiều khả năng vấn đề của bạn là do <scope>test</scope>(trong một số trường hợp cũng vậy <scope>provided</scope>), như đã đề cập @thangaraj .

Tài liệu nói:

Phạm vi này chỉ ra rằng sự phụ thuộc là không bắt buộc đối với việc sử dụng ứng dụng thông thường và chỉ khả dụng cho các giai đoạn biên dịch và thực hiện thử nghiệm. Các phụ thuộc kiểm tra không có tính bắc cầu và chỉ hiện diện cho các đường dẫn thử nghiệm và thực thi.

Vì vậy, nếu bạn không cần phụ thuộc cho mục đích thử nghiệm thì bạn có thể sử dụng thay vì (những gì bạn sẽ thấy trong mvnreposeective ):

<!-- 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>

Không có bất kỳ phạm vi nào (theo mặc định sẽ là phạm vi biên dịch khi không có phạm vi nào khác được cung cấp):

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

Điều này giống như:

 <!-- 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

Đây là 5 xu của tôi ...

Tôi đã có vấn đề tương tự trong khi chạy thử nghiệm. Vì vậy, tôi đã sửa nó bằng cách thêm một triển khai cho thời gian chạy thử nghiệm. Tôi đang sử dụng gradle cho dự án này.

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

testR.78Only nhóm: 'ch.qos.logback', tên: 'logback-classic', phiên bản: '1.2.3'


0

Đối với tôi, vấn đề là: Sử dụng Hibernate, tôi thấy rằng nó đã sử dụng slf4j và nó đã có trong classpath của tôi, vì vậy tôi quyết định sử dụng nó. Bước tiếp theo - thêm phần bổ trợ cho slf4j, vì vậy tôi đã thêm vào maven:

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

Nhưng nó đã thất bại với lỗi! SLF4J: Không thể tải lớp org org.slf4j.impl.StaticLoggerBinder xỉ

Giải pháp là: sự phụ thuộc của Hibernate của slf4j là phiên bản 1.7.26 và tôi đã thêm phụ thuộc phiên bản nhỏ 1.7.25 . Vì vậy, khi tôi sửa lỗi này - tất cả đã trở nên ổn


0

Tôi đã không thêm bất kỳ sự phụ thuộc nào, tôi chỉ thay đổi cách tôi đang tiêu thụ chúng.

Xem trước mã

(Bỏ ghi chú mã này nếu bạn đang sử dụng phiên bản tìm kiếm co giãn <7.0)

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

Mã hiện tại

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

Tôi đang sử dụng hàng loạt và với điều đó tôi loại bỏ lỗi đó.

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.