SLF4J: Đường dẫn lớp chứa nhiều ràng buộc SLF4J


206

Tôi nhận được lỗi sau. Có vẻ như có nhiều khung đăng nhập ràng buộc với sl4j. Không chắc chắn làm thế nào để giải quyết điều này. Bất kỳ trợ giúp nào cũng được đánh giá rất cao.

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.4/slf4j-log4j12-1.6.4.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

15
Đã giải quyết bằng cách sử dụng <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> trong các phần phụ thuộc (của pom.xml) đã gây ra xung đột đã giúp giải quyết vấn đề
user1493140


6
Bạn đã kiểm tra slf4j.org/codes.html#mult Môn_bindings như đã nêu trong cảnh báo chưa?
Peter Keller

7
Có lẽ tốt hơn là thêm câu trả lời (tự động trả lời) cho câu hỏi này và đánh dấu là "Đã chấp nhận", vì vậy câu hỏi sẽ xuất hiện dưới dạng "Đã giải quyết" trong các tìm kiếm SO
Roberto

1
Roberto, Cảm ơn đã phản hồi. Tôi đã sao chép giải pháp từ bình luận và đăng nó dưới dạng câu trả lời.
dùng1493140

Câu trả lời:


125

Đã giải quyết bằng cách thêm loại trừ sau vào phần phụ thuộc (của pom.xml) gây ra xung đột.

<exclusions>
    <exclusion>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </exclusion>
</exclusions> 

10
Sự phụ thuộc nào gây ra xung đột trong trường hợp này, tôi có cây phụ thuộc có 3 đề cập đến slf4j
PUG

22
để tìm hiểu làm thế nào log4j có được trên đường dẫn của bạn chạy phụ thuộc mvn: cây và lược qua, sau đó thêm đoạn mã ở trên vào phần phụ thuộc đó trong pom.xml của bạn
cyber-monk

1
@ user1493140 Tuy nhiên, nó không hoạt động đối với tôi. <lệ thuộc> <groupId> log4j </ groupId> <artifactId> log4j </ artifactId> <version> 1.2.17 </ version> <loại trừ> <loại trừ> <groupId> org.slf4j </ groupId> <artifact log4j12 </ artifactId> </ loại trừ> </ loại trừ> </ phụ thuộc>
Ashok kumar Ganesan

1
cho tôi một cuộc chiến bình khác nguyên nhân. Tôi đã phải loại trừ các tạo phẩm với id slf4j-nop và slf4j-jdk14. Sự phụ thuộc gây ra xung đột đối với tôi là clover-maven-plugin
ihebiheb

phiên bản ( slf4j-log4j12) có thể áp dụng cho tất cả không? hoặc chúng ta nên tìm ra phiên bản từ phụ thuộc mvn: cây ?
Lôi Dương

59

Phiên bản lớp;

configurations.all {
    exclude module: 'slf4j-log4j12'
}

2
Nhập mô hình từ ứng dụng chính vào khung tự động hóa .. điều này đã giải quyết vấn đề của tôi với gradle. ty.
Sẽ

1
Có phiên bản kiến ​​nào làm việc này không?
Balaji Boggaram Ramanarayan

1
không: kiến ​​không phải là một công cụ nhận thức phụ thuộc. Mạnh mẽ xem xét chuyển bản dựng của bạn để phân loại.
Matthew Mark Miller

1
giới thiệu mạnh mẽ chuyển bản dựng của bạn sang
sbt

2
Thông minh. Cứu tôi khỏi một vài giờ địa ngục phụ thuộc!
jseals 16/03/18

24

Lỗi có thể cung cấp thêm thông tin như thế này (mặc dù tên jar của bạn có thể khác)

SLF4J: Tìm thấy ràng buộc trong [jar: file: / D: /Java/reposective/ch/qos/logback/logback- classic / 1.2.3 / logback- classic-1.2.3.jar! / Org / slf4j / impl / StaticLoggerBinder . class] SLF4J: Tìm thấy ràng buộc trong [jar: file: / D: /Java/reposeective/org/apache/logging/log4j/log4j-slf4j-impl/2.8.2/log4j-slf4j-impl-2.8.2.jar ! /org/slf4j/impl/StaticLoggerBinder. class]

Nhận thấy rằng cuộc xung đột đến từ hai chiếc lọ, được đặt tên logback-classic-1.2.3log4j-slf4j-impl-2.8.2.jar.

Chạy mvn dependency:treetrong thư mục mẹ pom.xml dự án này, đưa ra:

xung đột cây phụ thuộc

Bây giờ chọn một trong những bạn muốn bỏ qua (có thể tiêu tốn một nỗ lực tinh tế tôi cần thêm trợ giúp về điều này)

Tôi quyết định không sử dụng cái được nhập từ spring-boot-starter-data-jpa(phụ thuộc hàng đầu) xuyên spring-boot-startersuốt spring-boot-starter-logging, pom trở thành:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

trong pom ở trên spring-boot-starter-data-jpasẽ sử dụng spring-boot-startercấu hình trong cùng một tệp, loại trừ logging(nó chứa logback)


1
Cảm ơn bạn đã giới thiệu mvn dependency:tree. Nó rất hữu ích ...
Jan Lochman

10

Phiên bản Sbt:

Nối exclude("org.slf4j", "slf4j-log4j12")vào sự phụ thuộc mà quá cảnh bao gồm slf4j-log4j12. Ví dụ: khi sử dụng Spark với Log4j 2.6:

libraryDependencies ++= Seq(
  // One SLF4J implementation (log4j-slf4j-impl) is here:
  "org.apache.logging.log4j" % "log4j-api" % "2.6.1",
  "org.apache.logging.log4j" % "log4j-core" % "2.6.1",
  "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.1",
  // The other implementation (slf4j-log4j12) would be transitively
  // included by Spark. Prevent that with exclude().
  "org.apache.spark" %% "spark-core" % "1.5.1" exclude("org.slf4j", "slf4j-log4j12")
)

1
Sbt có nghĩa là gì?
Petrus Theron

3
Công cụ xây dựng đơn giản *
Benny

4
<!--<dependency>-->
     <!--<groupId>org.springframework.boot</groupId>-->
     <!--<artifactId>spring-boot-starter-log4j2</artifactId>-->
<!--</dependency>-->

Tôi đã giải quyết bằng cách xóa cái này: spring-boot-starter-log4j2


không rõ ràng: bạn có nghĩa là xóa / bình luận trên phần xml, hoặc thêm?
Lôi Dương

3

Tôi chỉ bỏ qua / loại bỏ tập tin jar đó.

nhập mô tả hình ảnh ở đây


3

Chỉ sử dụng phụ thuộc theo yêu cầu, không phải tất cả :))). Đối với tôi, đối với công việc bình thường của quá trình ghi nhật ký, bạn cần sự phụ thuộc này loại trừ những người khác khỏi pom.xml

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

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

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

3

Đây là vấn đề vì lớp StaticLoggerBinder. Class thuộc về hai lọ khác nhau. lớp này tham chiếu từ logback-classic-1.2.3.jar và cùng lớp cũng được tham chiếu từ log4j-slf4j-impl-2.10.0.jar. cả hai trong jar trong classpath. Do đó có xung đột giữa chúng. Đây là lý do tệp nhật ký không được tạo ngay cả khi tệp log4j2.xml trong classpath [src / main / resource].

Chúng tôi đã chọn một trong các jar, tôi khuyên bạn nên sử dụng tệp log4j-slf4j-impl-2.10.0.jar và loại trừ tệp logback-classic-1.2.3.jar. Giải pháp: mở tệp pom và xem Phân cấp phụ thuộc [nhật thực] hoặc chạy
phụ thuộc mvn: lệnh cây để tìm ra cây phụ thuộc và nguồn phụ thuộc tải xuống phụ thuộc. tìm sự phụ thuộc mâu thuẫn và loại trừ chúng. Đối với ứng dụng Springboot hãy thử điều này.

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-logging</artifactId>
                    </exclusion>
                </exclusions>
        </dependency>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

This is working fine for me after struggling a lots.

2

... org.codehaus.mojo cobertura-maven-plugin 2.7 kiểm tra ch.qos.logback công cụ logback-classic com.sun ...

## Tôi đã sửa với cái này

... org.codehaus.mojo cobertura-maven-plugin 2.7 kiểm tra ch.qos.logback công cụ logback-classic com.sun ...


2

Đối với tôi, nó hóa ra là một vấn đề Eclipse / Maven sau khi chuyển từ log4j sang logback. Hãy xem .classpathtập tin của bạn và tìm kiếm chuỗi "log4j".

Trong trường hợp của tôi, tôi đã có những điều sau đây: <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.7.1/slf4j-log4j12-1.7.1.jar"/> <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.17/log4j-1.2.17.jar" />

Xóa các mục đó khỏi tệp (hoặc bạn có thể tạo lại nó) đã khắc phục sự cố.


2

Đối với tôi câu trả lời là buộc Maven xây dựng lại. Trong Nhật thực:

  1. Nhấp chuột phải vào dự án-> Maven -> Vô hiệu hóa bản chất Maven
  2. Nhấp chuột phải vào dự án-> Công cụ mùa xuân> Cập nhật phụ thuộc Maven
  3. Nhấp chuột phải vào dự án-> Cấu hình> Chuyển đổi dự án Maven

0

Tôi đã từng gặp vấn đề tương tự. Trong tệp pom.xml của tôi, tôi có cả hai

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

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>

Khi tôi xóa phần phụ thuộc spring-boot-starter-web, vấn đề đã được giải quyết.


-1

Sự kết hợp <scope>provided</scope><exclusions>không làm việc cho tôi.

Tôi đã phải sử dụng điều này:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <scope>system</scope>
    <systemPath>${project.basedir}/empty.jar</systemPath>
</dependency>

Trường hợp empty.jarlà một tập tin jar với nghĩa đen không có gì trong đó.


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.