Niezgodność RAM logowania
Buduję małą aplikację Java i mam nadzieję użyć logback do logowania.
Moja aplikacja jest zależna od starszego projektu, który loguje się przez
org.apache.commons | com.springsource.org.apache.commons.logging | 1.1.1
...więc moim planem było użycie
org.slf4j | jcl-over-slf4j | 1.5.6
... przekierowanie logowania JCL do
org.slf4j | slf4j-api | 1.6.0
...i ostatecznie do
ch.qos.logback | logback-classic | 0.9.22
ch.qos.logback | logback-core | 0.9.22
Więc moja aplikacja może logować się przez logback poprzez API slf4j, podczas gdy stary kod biblioteki może zalogować się do tej samej lokalizacji poprzez przekierowanie.
Niestety, skutkuje to
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)
Próbowałem wyższych i niższych liczb weryfikacji na niektórych z tych słoików, a także grzebałem w dokumentacji API i tym podobnych... ale nie jestem w stanie znaleźć i rozwiązać problemu.
Pomocy, proszę?Chociaż logback jest uważany za" strategiczny " framework logowania, mam pewną swobodę, w jakiej mechanizmie logowania ostatecznie używam. Mam jednak nadzieję, że użyję logbacka lub log4j i zdecydowanie chcę połączyć logowanie starego projektu z dowolnym" nowym " logowaniem framework kończy się, poprzez wspólną konfigurację.
3 answers
Mieszasz wersję 1.5.6 JCL bridge z wersją 1.6.0 slf4j-api; to nie zadziała z powodu kilku zmian w 1.6.0. Używaj tych samych wersji dla obu, np. 1.6.1 (najnowsza). Cały czas używam mostu jcl-over-slf4j i działa dobrze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 07:06:58
Wersje SLF4J 1.5.11 i 1.6.0 nie są kompatybilne (patrz compatibility report) ponieważ lista argumentów metody org.slf4j.spi.LocationAwareLogger.log
została zmieniona (dodano obiekt[] 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 )
Zobacz raporty zgodności dla innych wersji SLF4J na tej stronie .
Możesz generować takie raporty za pomocą narzędzia japi-compliance-checker.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-05 21:36:00
Żeby pomóc tym, którzy są w podobnej sytuacji do mnie...
Może to być spowodowane, gdy zależna biblioteka przypadkowo połączyła starą wersję slf4j. w moim przypadku była to tika-0.8. Zobacz https://issues.apache.org/jira/browse/TIKA-556
Obejście polega na wykluczeniu komponentu, a następnie ręcznym zależeniu od poprawnej lub poprawionej wersji.
Np.
<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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-01 04:43:33