2015-09-18 4 views
1

Я пытаюсь использовать Apache Karaf с Gelf Appender для подключения к Log4J, но я просто получаю ClassNotFoundException.OSGi/Karaf не находит GelfAppender

Я следовал инструкциям из Karaf Docs раздела «Использование собственных appenders»:

Я добавил папку system/org/graylog2/gelfj/1.1.12/ и скопировать gelfj-1.1.12.jar из Maven репо в папку. Я добавил эту строку etc/startup.properties:

org/graylog2/gelfj/1.1.12/org.graylog2.gelfj-1.1.12.jar=7 
org/ops4j/pax/logging/pax-logging-api/1.7.0/pax-logging-api-1.7.0.jar=8 

(Вторая линия уже была там, я следовал инструкции «добавить новый пакет фрагмента в список до расслоения чел-каротаж службы».)

Я также добавил в файл etc/org.ops4j.pax.logging.cfg

# Root logger 
log4j.rootLogger=INFO,out,graylog2,osgi:* 
... 
log4j.appender.graylog2=org.graylog2.log.GelfAppender 
log4j.appender.graylog2.graylogHost=foo.bar.de 
log4j.appender.graylog2.facility=myall 
log4j.appender.graylog2.Threshold=INFO 

Если я начну karaf я только получаю это исключение:

/opt/apache-karaf-2.3.11/bin/karaf server 
karaf: JAVA_HOME not set; results may vary 
log4j:ERROR Could not instantiate class [org.graylog2.log.GelfAppender]. 
java.lang.ClassNotFoundException: org.graylog2.log.GelfAppender not found by org.ops4j.pax.logging.pax-logging-service [4] 
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460) 
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72) 
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:191) 
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:198) 
    at org.apache.log4j.helpers.OptionConverter.instantiateByClassName(OptionConverter.java:326) 
    at org.apache.log4j.helpers.OptionConverter.instantiateByKey(OptionConverter.java:123) 
    at org.apache.log4j.PaxLoggingConfigurator.parseAppender(PaxLoggingConfigurator.java:97) 
    at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:735) 
    at org.apache.log4j.PropertyConfigurator.parseCatsAndRenderers(PropertyConfigurator.java:639) 
    at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:504) 
    at org.apache.log4j.PaxLoggingConfigurator.doConfigure(PaxLoggingConfigurator.java:72) 
    at org.ops4j.pax.logging.service.internal.PaxLoggingServiceImpl.updated(PaxLoggingServiceImpl.java:214) 
    at org.ops4j.pax.logging.service.internal.PaxLoggingServiceImpl$1ManagedPaxLoggingService.updated(PaxLoggingServiceImpl.java:362) 
    at org.apache.felix.cm.impl.helper.ManagedServiceTracker.updateService(ManagedServiceTracker.java:148) 
    at org.apache.felix.cm.impl.helper.ManagedServiceTracker.provideConfiguration(ManagedServiceTracker.java:81) 
    at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.provide(ConfigurationManager.java:1436) 
    at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceUpdate.run(ConfigurationManager.java:1392) 
    at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:103) 
    at java.lang.Thread.run(Thread.java:701) 
log4j:ERROR Could not instantiate appender named "graylog2". 

Я также пробовал это instructions с тем же результатом.

Спасибо за помощь.

ответ

1

Взятый из последнего gelfj-1.1.12.jar, я могу сказать, что это уже фрагментный комплект, который будет прикреплен к пакету pax-logging-service. Быстрая установка и обновление пакета pax-logging-service приводят к успешной его установке. Добавление вашей конфигурации сверху приводит к не найденному сбою узла.

Поэтому как gelf расслоение уже фрагмент расслоением, все это занимает установка его через

install mvn:org.graylog2/gelfj/1.1.12 

и

refresh 2 

или просто сделать перезапуск контейнера.

+0

Спасибо за ваш ответ, он решил проблему. Не могли бы вы объяснить, почему мне нужно установить пакет через оболочку? Как я могу заверить, что он будет загружаться в новой установке без доступа к оболочке? – marquies

+0

Это не требует установки его через оболочку. Если вы хотите создать свой собственный дистрибутив, лучше следовать инструкциям по созданию собственного дистрибутива. Если вы хотите просто использовать его в своем собственном приложении, убедитесь, что у вас есть этот пакет в вашем feature.xml, обновление пакета услуг должно выполняться автоматически (в зависимости от версии Karaf). –