Logback включить фрагмент в контейнер OSGi
У меня есть проект a-conf
с src/main/resources/logback/conf/a/CommonAppenders.xml
файл:
<included>
<appender name="FILE" class="FileAppender" />
</included>
Также у меня есть другой проект a-runable
с logback.xml
конфиг который импортирует CommonAppenders.xml
:
<configuration>
<!-- this is classpath import -->
<include resource="logback/conf/a/CommonAppenders.xml" />
...
</configuration>
Я могу собрать a-runable
в автономной банке со всеми зависимостями (a-conf
является одним из них) или в комплекте OSGi. Когда я запускаю автономное приложение, все в порядке - файлы журнала отображаются так, как указано в CommonAppenders.xml
, Но когда я запускаю контейнер OSGi, файлы журнала не создаются. Я думаю, что logback просто не может включать ресурс из classpath, потому что каждый пакет в контейнере OSGi имеет свои собственные загрузчики классов (logback использует ClassLoader.getResource()
включить файл).
Я проверил Export-Package: logback.conf.a
в a-conf.jar/META-INF/MANIFEST.MF
(это делает плагин maven bundlor) - все в порядке. добавленной Import-Package: logback.conf.a
в a-runable
без эффекта.
Я понятия не имею, что я могу сделать (без кода, чтобы изменить, просто конфиги). Любая помощь приветствуется.
PS Я нашел подобную проблему здесь, но logback.xml
уже в classpath и его собственные приложения работают нормально. Также у меня нет никаких FileNotFoundException
s в существующих журналах.
1 ответ
По умолчанию, я считаю, что ошибки запуска Logback просто сбрасываются, если вы не настраиваете прослушиватель (но я могу помнить неправильно). Ключ вероятно, что a-conf должен быть Фрагментом пакета, который содержит logback.jar. Это то, что я сделал для моей связки, в которой есть несколько доморощенных приложений.
Если вы хотите увидеть установку, в которой Logback предварительно настроен для вывода ошибок запуска в контейнер OSGi, взгляните на Pax-Logger 1.7 - https://github.com/ops4j/org.ops4j.pax.logging/tree/master/pax-logging-logback