3

Eclipse PDE プロジェクトを作成し、slf4j-api および slf4j.log4j12 バンドルを使用して log4j を依存関係として追加しました。クラスでロガーを作成しました:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyTest {

  private static final Logger logger = LoggerFactory.getLogger(MyTest.class
      .getName());

  public void tt() {
    logger.info("log-test");

  }

}

しかし、OSGI 起動構成を使用して PDE プロジェクトを実行すると、次の警告が表示されます。

log4j:WARN No appenders could be found for logger (loggin_test.MyTest).
log4j:WARN Please initialize the log4j system properly.

この情報に基づいて:

http://jaikiran.wordpress.com/2006/07/05/i-get-log4jwarn-no-appenders-could-be-found-for-logger-message-2/

log4j.properties を PDE クラスパスに入れる必要があります。私はそれを PDE プロジェクトのルートに配置して追加しようとしました:

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               log4j.properties

build.properties ペインに移動します。しかし、私はまだ同じ警告を受け取ります。log4j.properties ファイルは PDE プロジェクトのどこに配置すればよいですか?

編集: /src フォルダーに追加しようとしましたが、役に立ちません。

4

5 に答える 5

2

OSGi で初めてリソースの可視性の問題にぶつかりました。OSGi バンドルでは、依存関係を明示的に定義する必要があることに注意してください。問題は、バンドルが log4j プロパティ ファイルを定義していることですが、それを読み取る必要があるのは log4j バンドルです。しかし、log4j バンドルは、バンドルについて何も認識していません (また、そうすべきでもありません)。

問題に対する2つの解決策は次のとおりです。

  1. Eclipse のバディ メカニズムを使用する
  2. log4j プロパティ ファイルを OSGi フラグメントに配置し、log4j バンドルでホストします。

オプション 2 の方が優れたソリューションですが、オプション 1 の方が簡単な場合は、それを使用してください。

于 2010-08-26T11:39:56.903 に答える
0

私の知る限り、SLF4Jは単なるラッパーであるため、Log4j JARが必要です。JAR をApache Web サイトからダウンロードし、ビルド パスに追加すると、問題なく動作するはずです。

于 2010-08-26T11:21:25.077 に答える
0

私は同じ問題を抱えています。log4j.xml を含むフォルダーを Project Build Path に追加するだけでは十分ではありません (なぜですか?)。とにかく、その理由に加えて(おそらくEclipseの達人が私たちのためにそれに答えることができます)、log4j.xmlを含むフォルダーをEclipseの「実行構成」に追加するという問題を解決しました。

スタンドアロン アプリを初めて実行しようとしたときに、「ロガーのアペンダーが見つかりませんでした」という迷惑なメッセージが表示されたら、次の手順に従います。

  1. メニュー「実行」>「実行構成」に移動します
  2. メイン クラスが左側のツリーのどこかに表示されるはずです。おそらく「Javaアプリケーション」の下にあります。だからそれを選択してください
  3. 「クラスパス」タブを選択し、「ユーザーエントリ」を選択して「詳細」ボタンをクリックします。
  4. [詳細オプション] ポップアップ ウィンドウで、[フォルダーの追加] を選択し、[OK] ボタンをクリックします。
  5. [フォルダーの選択] ポップアップで、log4j.xml があるフォルダーに移動し、[OK] ボタンをクリックします。
  6. 「実行」ボタンをクリックして...そして... ついに!
于 2010-10-27T18:13:24.300 に答える
0

( jarを追加しているときに)使用slf4j-simpleから移行しようとしたときに、同じ状況が発生しました。デバッグを行った後、SteveD が述べたように、問題はリソースの可視性の結果です。私の状況では、ロギング ライブラリを保持するプラグインがありました。ただし、共有プラグインでロギング プロパティを指定したくありませんでした。slf4j-log4j12log4j

あなたの状況でうまくいくかもしれない私のアプローチは、ログ機能を持ちたいプラグインごとにログ設定をすることでした。ロギングが必要なプラグインの場合、プラグインのアクティベーターに次のようなものを追加します。

Bundle bundle = bundleContext.getBundle();
URL entry = bundle.getEntry("log4j.properties");

try(InputStream inputStream = entry.openStream())
{
    PropertyConfigurator.configure(inputStream);
}
catch(IOException e) {}

残念なことに、アクティベーターにコードを追加する必要があります。プラグインごとに異なるロギング機能を構成できました。新しいプラグインや Eclipse バディの登録を処理する必要はなく、マニフェストまたは build.properties ファイルで log4j.properties ファイルを管理する必要もありませんでした。

その他の注意事項

  • 初期化に失敗したメッセージ (「log4j システムを正しく初期化してください」) が表示される場合、それは 1 回だけ表示されます。2 つのプラグインが正しく構成されていないことを検出できず、1 つのエラー メッセージしか表示されなかったので、最初は混乱しました。
于 2013-10-16T18:08:25.650 に答える