2

Apache Karaf と Gelf Appender を使用して Log4J に接続しようとしましたが、ClassNotFoundException が発生します。

Karaf Docsセクションの「独自のアペンダーの使用」の指示に従いました。

フォルダーを追加し、Maven リポジトリーからフォルダーsystem/org/graylog2/gelfj/1.1.12/にコピーしました。gelfj-1.1.12.jarこの行をに追加しました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

(2行目はすでにそこにありました。「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".

私も同じ結果でこの指示を試しました。

手伝ってくれてありがとう。

4

1 に答える 1

1

最新のgelfj-1.1.12.jarから取得すると、すでにpax-logging-serviceバンドルにアタッチされるフラグメントバンドルであることがわかります。pax-logging-service バンドルをすばやくインストールしてリフレッシュすると、正常にインストールされます。上記の構成を追加すると、ホストが見つからないというエラーが発生します。

したがって、gelf バンドルはすでにフラグメント バンドルであるため、必要なのはそれをインストールすることだけです。

install mvn:org.graylog2/gelfj/1.1.12

そして

refresh 2

または、コンテナを再起動するだけです。

于 2015-09-19T20:40:26.610 に答える