SLF4J: क्लास पथ में कई SLF4J बाइंडिंग शामिल हैं


206

मुझे निम्नलिखित त्रुटि मिल रही है। ऐसा लगता है कि sl4j के लिए बाध्य कई लॉगिंग ढांचे हैं। निश्चित नहीं है कि इसे कैसे हल किया जाए। कोई भी मदद बहुत ही सराहनीय होगी।

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
हल का उपयोग करना <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> (pom.xml का) dependecies में कि वजह से संघर्ष का समाधान समस्या में मदद की
user1493140


6
क्या आपने पहले से ही slf4j.org/codes.html#multiple_bindings को चेतावनी में कहा गया है?
पीटर केलर

7
हो सकता है कि इस प्रश्न का उत्तर (ऑटो-उत्तर) जोड़ना बेहतर हो और इसे "स्वीकृत" के रूप में चिह्नित किया जाए, इसलिए यह प्रश्न SO खोज में "हल" के रूप में दिखाई देगा
रॉबर्टो

1
रॉबर्टो, प्रतिक्रिया के लिए धन्यवाद। मैंने टिप्पणी से समाधान की प्रतिलिपि बनाई और उत्तर के रूप में पोस्ट किया।
user1493140

जवाबों:


125

विरोध के कारण निर्भरता (pom.xml) में निम्न बहिष्करण जोड़कर हल किया गया।

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

10
जो निर्भरता इस मामले में संघर्ष का कारण बनी, मेरे पास निर्भरता का पेड़ है slf4j के 3 उल्लेख हैं
PUG

22
यह जानने के लिए कि log4j आपके रास्ते पर कैसे चल रहा है mvan निर्भरता: पेड़ और कंघी के माध्यम से, फिर ऊपर स्निपेट को उस निर्भरता में अपने pom.xml में जोड़ें
साइबर संन्यासी

1
@ user1493140 फिर भी यह मेरे लिए काम नहीं कर रहा है। <निर्भरता> <GroupId> log4j </ groupId> <विरूपण साक्ष्य> log4j </ विरूपण साक्ष्य> <संस्करण> 1.2.17 </ संस्करण> <बहिष्करण> <बहिष्करण> <GroupId> org .slf4j </ groupId> <कलाइयां> slf4j- log4j12 </ विरूपण साक्ष्य> </ बहिष्करण> </ बहिष्करण> </ निर्भरता>
अशोक कुमार गणेशन

1
मेरे लिए एक और जार युद्ध का कारण बनता है। मुझे आईडी slf4j-nop और slf4j-jdk14 के साथ कलाकृतियों को बाहर करना पड़ा। मेरे लिए संघर्ष का कारण बनी निर्भरता क्लोवर-
मावेन

क्या संस्करण ( slf4j-log4j12) सभी के लिए लागू है? या हमें मावन निर्भरता से संस्करण का पता लगाना चाहिए : पेड़ ?
लेई यांग

59

ग्रेड संस्करण;

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

2
ऑटोमेशन फ्रेमवर्क में मुख्य एप्लिकेशन से मॉडल आयात करना .. इससे मेरी समस्या हल हो गई। Ty।
होगा

1
क्या ऐसा करने का कोई चींटी संस्करण है?
बालाजी बोगगाराम रामनारायण

1
नहीं: चींटी एक निर्भरता जागरूक उपकरण नहीं है। मजबूती से अपने निर्माण को वर्गीकृत करने पर विचार करें।
मैथ्यू मार्क मिलर

1
दृढ़ता से अपने निर्माण को sbt :) में फिर से दर्ज करें:
ioleo

2
अति उत्कृष्ट। मुझे निर्भरता के कुछ घंटों से बचाया नरक!
jseals

24

त्रुटि संभवतः इस तरह की अधिक जानकारी देती है (हालाँकि आपके जार नाम अलग हो सकते हैं)

SLF4J: [jar: file: / D: /Java/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar.// org/ slf4j / impl / StaticLoggerBinder में बाध्यकारी पाया गया। .class] SLF4J: [jar: file: / D: /Java/repository/org/apache/log/log4j/log4j-slf4j-impl/2.8.2-log4j-slf4j-impl-2.8.2.jar में बाध्यकारी पाया गया। ! /org/slf4j/impl/StaticLoggerBinder.class]

ध्यान दिया कि संघर्ष दो जार से आता है, नाम logback-classic-1.2.3और log4j-slf4j-impl-2.8.2.jar

mvn dependency:treeइस प्रोजेक्ट में pom.xml पैरेंट फ़ोल्डर चलाएं , जो दे रहा है:

निर्भरता पेड़ संघर्ष

अब आप जिसे अनदेखा करना चाहते हैं उसे चुनें (एक नाजुक प्रयास का उपभोग कर सकते हैं मुझे इस पर अधिक सहायता की आवश्यकता है)

मैंने निर्णय लिया कि spring-boot-starter-data-jpa(ऊपर की निर्भरता) से आयात की गई वस्तु का उपयोग न करें spring-boot-starterऔर उसके माध्यम से spring-boot-starter-logging, पोम बन जाता है:

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

ऊपर pom में उसी फ़ाइल में कॉन्फ़िगर किया गया spring-boot-starter-data-jpaउपयोग होगा spring-boot-starter, जिसमें शामिल है logging(इसमें शामिल है logback)


1
परिचय देने के लिए धन्यवाद mvn dependency:tree। यह बहुत मददगार है ...
Jan Lochman

10

Sbt संस्करण:

exclude("org.slf4j", "slf4j-log4j12")उस निर्भरता के लिए आवेदन करें जिसमें पारगमन शामिल है slf4j-log4j12। उदाहरण के लिए, लॉग 4j 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 किस लिए खड़ा है?
पेट्रस थेरॉन

3
सरल बिल्ड टूल *
बेनी

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

मैंने इसे हटाकर हल किया: स्प्रिंग-बूट-स्टार्टर-लॉग 4 जे 2


स्पष्ट नहीं है: क्या आपका मतलब xml अनुभाग के ऊपर हटाना / टिप्पणी करना है, या जोड़ना है?
लेई यांग

3

मैंने उस जार फ़ाइल को बस अनदेखा / हटा दिया।

यहां छवि विवरण दर्ज करें


3

बस केवल आवश्यक निर्भरता का उपयोग करें, सभी :)))। मेरे लिए, लॉगिंग प्रक्रिया के सामान्य कार्य के लिए आपको इस निर्भरता की आवश्यकता है, दूसरों को 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

यह समस्या है क्योंकि StaticLoggerBinder.class वर्ग दो अलग जार से संबंधित है। यह वर्ग लॉगबैक-क्लासिक-1.2.3.jar से संदर्भित है और उसी वर्ग ने लॉग 4j-slf4j-impl-2.10.0.jar से भी संदर्भित किया है। दोनों वर्गपथ में जार। इसलिए उनके बीच संघर्ष है। यह लॉग फ़ाइल का कारण है, भले ही क्लासपैथ [src / main / resource] में log4j2.xml फ़ाइल नहीं है।

हमारे पास जार में से एक का चयन है, मैं log4j-slf4j-impl-2.10.0.jar फ़ाइल का उपयोग करने और लॉगबैक-क्लासिक-1.2.3.jar फ़ाइल को बाहर करने की सलाह देता हूं। समाधान: पोम फ़ाइल खोलें और निर्भरता पदानुक्रम देखें [ग्रहण] या
रनिंग मावन निर्भरता: निर्भरता पेड़ और निर्भरता को डाउनलोड करने वाले निर्भरता के स्रोत का पता लगाने के लिए ट्री कमांड। परस्पर विरोधी निर्भरता का पता लगाएं और उन्हें बाहर करें। स्प्रिंगबूट एप्लिकेशन के लिए यह प्रयास करें।

<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 परीक्षण ch.qos.logback लॉगबैक-क्लासिक टूल com.sun ...

## मैंने इसके साथ तय किया

... org.codehaus.mojo cobertura-maven-plugin 2.7 परीक्षण ch.qos.logback लॉगबैक-क्लासिक टूल com.sun ...


2

मेरे लिए, यह log4j से logback पर स्विच करने के बाद एक ग्रहण / मावेन मुद्दा बन गया। अपनी .classpathफ़ाइल पर एक नज़र डालें और स्ट्रिंग की खोज करें"log4j"

मेरे मामले में मेरे पास निम्नलिखित थे: <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" />

फ़ाइल से उन प्रविष्टियों को हटाना (या आप इसे पुनः प्राप्त कर सकते हैं) ने समस्या को ठीक कर दिया।


2

मेरे लिए इसका जवाब मावेन के पुनर्निर्माण के लिए मजबूर करना था। ग्रहण में:

  1. प्रोजेक्ट पर राइट क्लिक करें-> मावेन -> मावेन प्रकृति को अक्षम करें
  2. प्रोजेक्ट पर राइट क्लिक करें-> स्प्रिंग टूल्स> अपडेट मेवेन डिपेंडेंसीज
  3. प्रोजेक्ट पर राइट क्लिक करें-> कॉन्फ़िगर> कन्वर्ट मेवेन प्रोजेक्ट

0

मुझे भी यही समस्या थी। मेरे pom.xml में मैं दोनों था

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

जब मैंने स्प्रिंग-बूट-स्टार्टर-वेब निर्भरता को हटा दिया, तो समस्या हल हो गई।


-1

का संयोजन <scope>provided</scope>और <exclusions>मेरे लिए काम नहीं किया।

मुझे इसका उपयोग करना था:

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

empty.jarएक जार फ़ाइल कहाँ है जिसमें शाब्दिक रूप से इसमें कुछ भी नहीं है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.