लॉगिंग फ्रेमवर्क असंगति


109

मैं एक छोटा जावा ऐप बना रहा हूं और लॉगिंग के लिए लॉगबैक का उपयोग करने की उम्मीद कर रहा हूं।

मेरे ऐप में एक पुराने प्रोजेक्ट पर निर्भरता है जो इसकी लॉगिंग करता है

org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1

... इसलिए मेरी योजना का उपयोग करना था

org.slf4j | jcl-over-slf4j | 1.5.6

... JCL लॉगिंग को पुनर्निर्देशित करने के लिए

org.slf4j | slf4j-api | 1.6.0

... और आखिरकार

ch.qos.logback | logback-classic | 0.9.22
ch.qos.logback | logback-core | 0.9.22

इसलिए मेरा ऐप अपने slf4j एपीआई के माध्यम से लॉगबैक के माध्यम से लॉग इन कर सकता है, जबकि पुराना लाइब्रेरी कोड रीडायरेक्शन के माध्यम से उसी स्थान पर लॉग इन कर सकता है।

काश, यह परिणाम में

java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
at   org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:141)

मैंने इनमें से कुछ जार पर उच्च और निम्न सत्यापन संख्याओं की कोशिश की है और एपीआई प्रलेखन के माध्यम से खुदाई कर रहा हूं और ऐसे ... लेकिन मैं समस्या को खोजने और हल करने में असमर्थ हूं।

कृपया मदद करें?

यद्यपि लॉगबैक को "रणनीतिक" लॉगिंग फ्रेमवर्क माना जाता है, मेरे पास कुछ लेवे हैं जिसमें लॉगिंग तंत्र मैं अंततः उपयोग करता हूं। मैं या तो logback या log4j का उपयोग करने की उम्मीद करूंगा, हालांकि, और मैं निश्चित रूप से पुराने प्रोजेक्ट के लॉगिंग को जो भी "नया" लॉगिंग फ्रेमवर्क समाप्त करना चाहता हूं, को एक सामान्य कॉन्फ़िगरेशन के माध्यम से मर्ज करना चाहता हूं।

जवाबों:


111

आप jcl ब्रिज के 1.5.6 संस्करण को slf4j-api के 1.6.0 संस्करण के साथ मिला रहे हैं; 1.6.0 में कुछ बदलावों के कारण यह काम नहीं करेगा। दोनों के लिए समान संस्करण का उपयोग करें, अर्थात 1.6.1 (नवीनतम)। मैं हर समय jcl-over-slf4j पुल का उपयोग करता हूं और यह ठीक काम करता है।


2
यह सही काम किया, निश्चित रूप से; आपका बहुत बहुत धन्यवाद! मैंने उन जार के 1.6.1 का उपयोग नहीं किया था क्योंकि वे उपलब्ध नहीं थे। मुझे m2eclipse पर बहुत गुस्सा आ रहा है, जो मुझे सभी उपलब्ध संस्करणों को दिखाने के लिए अभी तक रहस्यमय तरीके से उनमें से एक महत्वपूर्ण संख्या को छोड़ देता है।
कार्ल स्मोत्रिकेज़

1
बस किसी और के हित के लिए: मैं निर्भरता ग्राफ में एक लाल तीर के साथ समाप्त हुआ क्योंकि यहां तक ​​कि नवीनतम लॉगबैक-कोर slf4j-1.6.0 पर जोर देता है। जब तक सभी लाल तीर गायब नहीं हो गए, तब तक संस्करणों के साथ कुछ और डीडलिंग हुई, लेकिन अब यह काम कर रहा है और सभी नीले तीर हैं।
कार्ल स्मोत्रिकेज़

1
मैं वास्तव में ऐसा कैसे करूं।
user1721803

धन्यवाद ... 'jcl-over-slf4j' के प्रयोग से मेरा दिन बच गया।
तारिक एम नसीम

41

SLF4J 1.5.11 और 1.6.0 संस्करण संगत नहीं हैं ( संगतता रिपोर्ट देखें ) क्योंकि org.slf4j.spi.LocationAwareLogger.logविधि की तर्क सूची को बदल दिया गया है (जोड़ा गया वस्तु [] p5):

SLF4J 1.5.11:

LocationAwareLogger.log ( org.slf4j.Marker p1, String p2, int p3,
                          String p4, Throwable p5 )

SLF4J 1.6.0:

LocationAwareLogger.log ( org.slf4j.Marker p1, String p2, int p3,
                          String p4, Object[] p5, Throwable p6 )

इस पृष्ठ पर अन्य SLF4J संस्करणों के लिए संगतता रिपोर्ट देखें ।

आप जापी-अनुपालन-चेकर उपकरण द्वारा ऐसी रिपोर्टें उत्पन्न कर सकते हैं ।

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


23

बस एक ऐसी ही स्थिति में उन लोगों की मदद करने के लिए ...

यह तब हो सकता है जब एक आश्रित पुस्तकालय ने गलती से slf4j के पुराने संस्करण को बंडल कर दिया हो। मेरे मामले में, यह tika-0.8 था। Https://issues.apache.org/jira/browse/TIKA-556 देखें

चारों ओर का काम घटक को बाहर करता है और फिर मैन्युअल रूप से सही या पैच किए गए संस्करण पर निर्भर करता है।

ईजी।

    <dependency>
        <groupId>org.apache.tika</groupId>
        <artifactId>tika-parsers</artifactId>
        <version>0.8</version>
        <exclusions>
            <exclusion>
                <!-- NOTE: Version 4.2 has bundled slf4j -->
                <groupId>edu.ucar</groupId>
                <artifactId>netcdf</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <!-- Patched version 4.2-min does not bundle slf4j -->
        <groupId>edu.ucar</groupId>
        <artifactId>netcdf</artifactId>
        <version>4.2-min</version>
    </dependency>

धन्यवाद! जब मैं SLF4J 1.6.1 और लॉगबैक 0.9.28 के साथ जैकबबिट 2.2.5 का उपयोग करने की कोशिश कर रहा था, तो मैं इससे प्रभावित हुआ!
हेंडी इरावन

धन्यवाद। मैं यहाँ आपके उत्तर से जुड़ा हूँ: spring-java-ee.blogspot.com/2011/04/…
Irawan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.