【问题标题】:OSGi/Karaf doesn't find GelfAppenderOSGi/Karaf 没有找到 GelfAppender
【发布时间】:2015-09-18 20:43:23
【问题描述】:

我尝试使用带有 Gelf Appender 的 Apache Karaf 连接到 Log4J,但我只是得到 ClassNotFoundException。

我按照Karaf Docs“使用您自己的附加程序”部分的说明进行操作:

我添加了一个文件夹 system/org/graylog2/gelfj/1.1.12/ 并将 gelfj-1.1.12.jarfrom Maven repo 复制到该文件夹​​中。我将此行添加到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

(第二行已经存在,我按照说明“将新的片段包添加到 pax-logging-service 包之前的列表中”。)

我还添加到文件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,结果相同。

感谢您的帮助。

【问题讨论】:

    标签: logging osgi apache-karaf graylog2


    【解决方案1】:

    取自最新的 gelfj-1.1.12.jar,我可以说它已经是一个片段包,将附加到 pax-logging-service 包。快速安装并刷新 pax-logging-service 捆绑包会成功安装它。 从上面添加配置会导致找不到主机失败。

    因此,由于 gelf 捆绑包已经是片段捆绑包,因此只需通过

    安装它
    install mvn:org.graylog2/gelfj/1.1.12
    

    还有一个

    refresh 2
    

    或者只是重新启动容器。

    【讨论】:

    • 感谢您的回答,它解决了问题。你能解释一下,为什么我需要通过 shell 安装包?我如何确保它会在不访问 shell 的情况下加载到新安装中?
    • 它不需要你通过 shell 安装它。如果您想构建自己的自定义发行版,最好按照构建自己的发行版的说明进行操作。如果您只想在自己的应用程序中使用它,请确保您的 feature.xml 中有这个包,服务包的刷新应该自动完成(取决于 Karaf 的版本)。
    猜你喜欢
    • 2017-11-15
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2016-09-30
    • 2017-02-01
    • 2013-03-11
    • 2015-04-19
    相关资源
    最近更新 更多