Çerçeve uyumsuzluğunu günlüğe kaydetme


109

Küçük bir Java uygulaması oluşturuyorum ve günlük kaydı için günlük kaydını kullanmayı umuyorum.

Uygulamamın günlüğe kaydetmeyi şu yolla yapan eski bir projeye bağımlılığı var

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

... yani planım kullanmaktı

org.slf4j | jcl-over-slf4j | 1.5.6

... JCL günlüğünü şuraya yeniden yönlendirmek için:

org.slf4j | slf4j-api | 1.6.0

... ve nihayetinde

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

Böylece, uygulamam slf4j API'si aracılığıyla logback aracılığıyla oturum açabilirken, eski kitaplık kodu yeniden yönlendirme yoluyla aynı konuma giriş yapabilir.

Ne yazık ki, bu sonuç

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)

Bu kavanozların bazılarında daha yüksek ve daha düşük sürüm sayılarını denedim ve ayrıca API belgelerini ve benzerlerini araştırdım ... ancak sorunu bulup çözemiyorum.

Yardım lütfen?

Logback "stratejik" loglama çerçevesi olarak kabul edilse de, eninde sonunda kullandığım loglama mekanizmasını biraz boşluk bıraktım. Yine de logback veya log4j kullanmayı umuyorum ve kesinlikle eski projenin günlüğünü ortak bir yapılandırma yoluyla "yeni" günlükleme çerçevesi ne olursa olsun birleştirmek istiyorum.

Yanıtlar:


111

Jcl köprüsünün 1.5.6 sürümünü slf4j-api'nin 1.6.0 sürümüyle karıştırıyorsunuz; 1.6.0'daki birkaç değişiklik nedeniyle bu çalışmayacaktır. Her ikisi için de aynı sürümleri kullanın, yani 1.6.1 (en son sürüm). Her zaman jcl-over-slf4j köprüsünü kullanıyorum ve iyi çalışıyor.


2
Elbette bu hemen işe yaradı; çok teşekkür ederim! Bu kavanozlardan 1.6.1'i kullanmadım çünkü mevcut değillerdi. Bana mevcut tüm sürümleri gösterme iddiasında olan, ancak gizemli bir şekilde önemli sayıda düşüren m2eclipse'den çok rahatsız oldum.
Carl Smotricz

1
Sırf takip edenlerin ilgisi için: Bağımlılık grafiğinde kırmızı bir ok buldum çünkü en son logback-core bile slf4j-1.6.0'da ısrar ediyor. Tüm kırmızı oklar kaybolana kadar sürümlerle biraz daha uğraşmak gerekti, ama şimdi hem çalışıyor hem de tüm mavi oklar.
Carl Smotricz

1
Bunu tam olarak nasıl yaparım?
user1721803

Teşekkürler ... 'jcl-over-slf4j' kullanmak günümü kurtardı.
Tarık M Nasim

41

SLF4J 1.5.11 ve 1.6.0 sürümleri uyumlu değildir ( uyumluluk raporuna bakın ) çünkü argüman listesiorg.slf4j.spi.LocationAwareLogger.log yöntemin değiştirildi (Object [] p5 eklendi):

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 )

Bu sayfadaki diğer SLF4J sürümleri için uyumluluk raporlarına bakın .

Bu tür raporları japi-uygunluk-denetleyicisi aracıyla oluşturabilirsiniz.

görüntü açıklamasını buraya girin


23

Sırf kendime benzer durumda olanlara yardım etmek için ...

Bu, bağımlı bir kitaplığın yanlışlıkla slf4j'nin eski bir sürümünü paketlemesinden kaynaklanabilir. Benim durumumda tika-0.8 idi. Bkz. Https://issues.apache.org/jira/browse/TIKA-556

Çözüm, bileşeni hariç tutar ve ardından doğru veya yamalı sürüme manuel olarak bağlıdır.

ÖRNEĞİN.

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

Teşekkürler! Jackrabbit 2.2.5'i SLF4J 1.6.1 ve Logback 0.9.28 ile kullanmaya çalışırken bundan etkilendim!
Hendy Irawan

Teşekkürler. Cevabınıza burada bağlantı verdim: spring-java-ee.blogspot.com/2011/04/…
Hendy Irawan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.