2015-08-16 1 views
-1

Я пытаюсь сделать karaf 3.0.4 использовать logback. В коде я пытаюсь программно создать FileAppender для журнала регистрации ошибок.Невозможно выполнить работу с karaf 3.0.4

ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("bingo"); 

Здесь LoggerFactor является SLF4J LoggerFactory. Я не размещал код, который добавляет файл appender.

Это бросает следующее исключение в karaf:

Caused by: java.lang.ClassCastException: org.ops4j.pax.logging.slf4j.Slf4jLogger cannot be cast to ch.qos.logback.classic.Logger 
at bingo.concurrent.TaskContextImpl.<init>(TaskContextImpl.java:34) 
at bingo.concurrent.TaskExecutorImpl.execute(TaskExecutorImpl.java:83) 

Я прошел через уже сообщали подобные вопросы: How to make Pax logging to use the loggback config

Я уже сделали следующее:

  • Сделано чел -logging-logback как часть startup.properties, поэтому он всегда устанавливается на запуск karaf. Версия, которую я использовал, - 1.8.3.
  • Измененный файл конфигурации org.ops4j.pax.logging.cfg org.ops4j.pax.logging.logback.config.file = $ {karaf.home} /etc/logback.xml

Это не помогло. Нет никаких журналов, которые захватываются в файле karaf.log. Я также попытался вручную установить pax-logging-logback, но это тоже не помогло, и у меня такой же результат.

Я что-то не хватает?

С уважением, Madhav

ответ

1

мне удалось решить эту проблему. К сожалению, karaf поставляется в комплекте с службой регистрации pax, которая завершает свою собственную реализацию для регистратора Slf4j и всегда делегирует эту реализацию. Если вы хотите использовать logback в качестве реализации регистрации по умолчанию не только для журналов karaf, но и для определения пользовательских приложений резервного копирования в коде приложения, который работает на karaf, тогда мы должны сделать следующее:

Есть 2 способа заставить его работать - используйте делегирование загрузки osgi или явно добавьте пакеты в org.osgi.framework.system.packages.extra в etc/config.properties. Мы пошли с последним, поскольку karaf был просто локальным временем выполнения, когда мы хотели быстро протестировать материал, и мы не хотели менять делегирование загрузки, поскольку это потребовало бы изменения способа импорта/экспорта пакетов в отдельных пакетах, которые могли бы повлиять продуктивное время выполнения, которое не было карафом.

  • Эти пучки должны быть удалены: чел-каротаж сервис, Библиотека/бен/karaf-client.jar
  • К Lib папки добавьте следующие пакеты (выберите варианты, которые поддерживаются вашим karaf выполнения) slf4j-api, logback-core, logback-classic, jul-to-slfj, jcl-over-slf4j, osgi-over-slf4j
  • В etc/startup.properties - удалить ссылки на службу pax-logging-service и pax-logging-api
  • Добавьте необходимые пакеты в etc/config.properties в org.osgi.framework.system.packages.extra, убедитесь, что дополнительных пробелов нет как karaf жалуется
  • Создайте logback.xml и добавьте его либо в $ karaf.home, либо в $ karaf.home/etc
  • Прокомментируйте все в etc/org.ops4j.pax.logging.CFG
  • В и т.д./system.properties добавить logback.configurationFile = "путь к logback.xml файл"

Это все !! Мы не смогли сделать org.apache.karaf.log.core и org.apache.karaf.log.command, и поскольку мы не использовали команды консоли karaf logging, мы оставили его как есть.

Cheers !! Madhav

+0

Я вижу аналогичную проблему с Karaf 3.0.5. Подробности размещены здесь http://stackoverflow.com/questions/35628958/using-logback-with-karaf-3-0-5-running-under-servicemix. Вы можете помочь? – tuk