2

Mavenリポジトリのlog4j-1.2.17バンドルを使用しています。私はバンドルでこのコードを実行しようとしています(私のバンドルはlog4j-1.2.17バンドルを呼び出します)

    PropertyConfigurator.configure(props());
private static Properties props() {
    Properties props = new Properties();
    props.put("log4j.rootLogger", "INFO, R");
    props.put("log4j.appender.R",
            "org.apache.log4j.DailyRollingFileAppender");
    props.put("log4j.appender.R.File", "logs/IhtikaClient.log");
    props.put("log4j.appender.R.Append", "true");
    props.put("log4j.appender.R.Threshold", "INFO");
    props.put("log4j.appender.R.DatePattern", "'.'yyyy-MM-dd");
    props.put("log4j.appender.R.layout", "org.apache.log4j.PatternLayout");
    props.put("log4j.appender.R.layout.ConversionPattern",
            //"%d{HH:mm:ss,SSS} %c - %m%n");
            //"[%5p] %d{yyyy-MM-dd mm:ss} (%F:%M:%L)%n%m%n%n");
            "[%5p] %d{yyyy-MM-dd mm:ss} %c (%F:%M:%L)%n%m%n");
    return props;
}

しかし、私はエラーがあります

log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" object is not assignable to a "org.apache.log4j.Appender" variable. log4j:ERROR The class "org.apache.log4j.Appender" was loaded by log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@9da1dd] whereas object of type log4j:ERROR "org.apache.log4j.DailyRollingFileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@4b222f]. log4j:ERROR Could not instantiate appender named "R". log4j:ERROR A "org.apache.log4j.DailyRollingFileAppender" object is not assignable to a "org.apache.log4j.Appender" variable. log4j:ERROR The class "org.apache.log4j.Appender" was loaded by log4j:ERROR [org.apache.felix.framework.BundleWiringImpl@9da1dd] whereas object of type log4j:ERROR "org.apache.log4j.DailyRollingFileAppender" was loaded by [sun.misc.Launcher$AppClassLoader@4b222f]. log4j:ERROR Could not instantiate appender named "R".

バンドルが順番に読み込まれました

.getBundleContext().installBundle("......../log4j-1.2.17.jar")
.getBundleContext().installBundle("......../I_MainForm-1.0-SNAPSHOT.jar")

このエラーを修正するにはどうすればよいですか?私の英語をごめんなさい。よろしく、アーサー。

4

4 に答える 4

7

基本的に、他の問題を修正する代わりにコードで本当に必要な場合を除いて、org.osgi.framework.system.packagesまたはを使用してクラスをフレームワークに「リーク」しないでください。org.osgi.framework.system.packages.extraどうやら、それはlog4jの問題です。

システムプロパティを設定することで修正できます。

-Dlog4j.ignoreTCL=true 
于 2012-09-26T10:05:33.690 に答える
4

Log4jクラスはsun.miscクラスローダーによってロードされたように見えるので、OSGiの外部からlog4jクラスを提供しているものがあると思います。Log4Jクラスをロードできない理由を説明するLog4Jエントリがあるという事実は、Log4Jの一部のバージョンがすでに存在していることを意味します。

カスタマイズされたバージョンのFelixを使用していますか?org.osgi.framework.system.packages=...もしそうなら、エントリまたはエントリを含む構成ファイルのようなものを見つけることができますorg.osgi.framework.system.packages.extra=...か?

Log4jバンドルを削除するとどうなりますか?それでもLog4jクラスを見つけることができますか?

よろしく、フランク

于 2012-07-30T10:29:09.877 に答える
0

独自のコードでlog4jを設定することは、OSGiではお勧めできません。ops4jpaxロギングを確認する必要があります。ログフレームワークのセットアップを処理し、バンドルでlog4japiを使用するだけです。参照:http ://team.ops4j.org/wiki/display/paxlogging/Pax+Logging

于 2012-07-30T22:09:30.803 に答える
0

これは私のために働いた:

mvn install -D log4j.ignoreTCL=true
于 2022-02-23T17:15:25.303 に答える