Как работать с различными решениями журналирования в OSGi (Apache Felix)
В OSGi существует разделение между интерфейсом регистрации и фактическим выходом.
Таким образом, с помощью LogService это не означает, что что-либо записывается, например, в консоль. Это то, за что отвечает LogReaderService.
В моей текущей среде выполнения я использую addind org.apache.felix.log, который предоставляет реализацию LogReaderService, которая должна заботиться о выводе. Но я все еще ничего не вижу на консоли... несмотря на множество других вещей из других комплектов.
На следующем шаге я создал свой собственный LogListener, который должен вызываться LogServiceReader. Я просто использовал код из этой статьи и отладил Активатор, чтобы увидеть, добавлен ли слушатель. По-прежнему нет выхода.
В последний раз я проверил свойства Felix и установил felix.log.level = 3 (Info), но опять же, ничего не вышло. Что еще меня удивило, что я все еще мог видеть много информации DEBUG, несмотря на то, что установил уровень в Info?
16:47:46.311 [qtp1593165620-27] DEBUG org.eclipse.jetty.http.HttpParser
Мне кажется, что существуют разные стратегии ведения журналов, которые используют разные свойства конфигурации. Например, после того, как я добавил pax-logging-service (которая использует классический подход к журналированию) в мою среду выполнения, я мог видеть вывод, но в настоящее время я хотел бы придерживаться felix-logging.
Может кто-нибудь объяснить, как отключить Blueprint-Debug-Level, который, как я полагаю, вызывает текущий вывод, и включить простую регистрацию в felix через LogService? Должна быть стандартная консольная реализация, даже если она не указана в спецификации.
1 ответ
Спасибо Кристиану Шнайдеру и Баласу Жолдосу: оба комментария были очень полезными.
Чтобы ответить на вопрос: мне нужно предоставить ServiceTrackerCustomizer, как показано в примере Balazs здесь. Поскольку у меня уже был ConsoleLogListener, было достаточно зарегистрировать слушателя в TrackerCustomizer.
Поскольку моя текущая задача состоит в переносе большого унаследованного приложения, в котором я хотел бы представить OSGi, возможно, имеет больше смысла использовать Pax-Logging, поскольку log4j уже используется в сотнях классов, которые мы, вероятно, не изменим на LogService.
Выходные данные Pax-Logging можно настроить с помощью свойства org.ops4j.pax.logging.DefaultServiceLog.level, установленного в INFO.