Mój projekt jest pakowany jako plik EAR zawierający interfejs API SLF4J (1.7.5) oraz biblioteki logback jako jego implementację (logback-core 1.0.13
i logback-classic 1.0.13
).SLF4J - Wiązania są zastępowane przez inne aplikacje na tym samym serwerze aplikacji.
Kiedy (użyłem) do wdrożenia mojego projektu, LoggerFactory SLF4J znajduje logback jako możliwe powiązanie i używany jest prawidłowy rejestrator (to jest logback).
Mam teraz łącznik zasobów (activemq-rar-5.8.0.rar
), który jest wdrażany przed moim własnym plikiem EAR (ponieważ pliki EAR wymagają wersji RAR). Niestety ten RAR zawiera własną implementację SLF4J (slf4j-api-1.6.6.jar
slf4j-log4j12-1.6.6.jar
log4j-1.2.17.jar
). Pliki RAR używają implementacji log4j.
Kiedy wdrażam plik EAR, LoggerFactory wewnątrz kodu mojej aplikacji nagle korzysta z implementacji log4j (org.slf4j.impl.Log4jLoggerAdapter
) - mimo że spodziewałem się oddzielenia ścieżki klas od RAR.
Nie wydaje się, żeby tak było - więc co robię źle (RAR powinien używać log4j, moje EAR powinno używać logback)?
Aktualizacja 1: It doesn't look as if I am alone, ale niestety odpowiedź brakuje ..
Aktualizacja 2:
Według this stole, GlassFish ładuje moduł złącza przed biblioteki EAR/WAR (które są ostatnimi bibliotekami do załadowania).
Update 3:
udało mi się naprawić "wiązanie": Jeśli mogę umieścić slf4j-api-1.7.5.jar
i realizację logback (logback-core-1.0.13.jar
i logback-classic-1.0.13.jar
) wewnątrz folderu w GlassFish domains/<myDomain>/lib
, logback zostaną wykorzystane jako implementacja logowania (patrz Aktualizacja 2 - "Common Classloader" pojawia się przed "Connector Classloader").
Niestety, moje pliki konfiguracyjne nie są już znalezione, ponieważ znajdują się wewnątrz WAR/EAR - które zostaną załadowane później przez inny program ładujący klasy ("Archive Classloader").
To nie jest tak naprawdę rozwiązanie dla mnie, ponieważ chciałbym zachować pliki konfiguracyjne logback w EAR/WAR (ponieważ każda aplikacja używa innej konfiguracji).
Rodzaj odniesieniu
stupidSheep
Dlaczego pakiet log4j w zależności? Czy kontener nie może zająć się konfiguracją rejestrowania i dostarczyć imp? – roby
Nie pakuję log4j jako zależności przez siebie. Jest w RAR (adapterze zasobów) udostępnianym przez Apache ActiveMQ (http://activemq.apache.org/maven/5.8.0/activemq-rar/dependencies.html). Te pliki JAR znajdują się wewnątrz RAR wraz z niektórymi plikami konfiguracyjnymi dziennika. – stupidSheep