1

log4jパッケージを使用するのは初めてですが、エラーは表示されません。これは非常に単純で単純なコードサンプルです。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class TestLogger {

    private static Logger logger;

    public static void main(String[] args) {

        logger = LogManager.getLogger(TestLogger.class);
        logger.info("Hello");

    }
}

コンパイルしようとすると、次のエラーが発生します。

my.package.logging.TestLogger.main(TestLogger.java:15)のorg.apache.logging.log4j.LogManager.getLogger(LogManager.java:129)のスレッド"main"java.lang.NullPointerExceptionの例外

一体何を意味するのだろうか...

ここで手伝ってもらえますか?

4

3 に答える 3

3

log4j2 jarのクラスパスで複数のコピーを回避することで、この問題を解決しました。

NPEは、LogManagerの129行目で発生します。(returnステートメント= 129行目)

/**
 * Return a Logger with the specified name.
 *
 * @param name The logger name.
 * @return The Logger.
 */
public static Logger getLogger(String name) {

    return factory.getContext(LogManager.class.getName(), null, false).getLogger(name);
}

問題は、ファクトリ(LoggerContextFactory)がnull=初期化されていないことのようです。初期化は、LogManagerクラスの静的初期化ブロックで行われます。

私の仮定では、クラスパスに複数のLogManagerがある場合、初期化は失敗します。

私のプロジェクト(Eclipseで開発されたWebアプリケーション)では、WEB-INF / libにjarがあり、のプロジェクトへの依存関係によって参照されていました。すべての参照が同じjarを指すようにすることで、私の場合はその問題が解決しました。

于 2012-10-14T00:45:18.837 に答える
1

以下は私のために機能します(更新:元の投稿と同じですが、インポートが表示されます)

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

public class TestLogger
{
    private static Logger logger;

    public static void main(String[] args) {
        logger = LogManager.getLogger(TestLogger.class);
        logger.info("Hello");
    }
}

log4j構成を作成した場合、それ以外の場合は恐ろしいエラーが発生します。

log4j:WARN No appenders could be found for logger (TestLogger).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
于 2012-10-06T22:20:15.583 に答える
1

おそらく、依存関係の1つが欠落しています。log4j-api-2.0-beta1.jarクラスパスにファイルを含めるだけであれば、これは簡単に再現できます。

バイナリディストリビューションをダウンロードした場合log4j-core-2.0-beta1.jarは、クラスパスにもを含めます。Mavenを使用している場合は、これをpom.xml:に入れてください。

  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.0-beta1</version>
  </dependency>
  <dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.0-beta1</version>
  </dependency>
于 2012-10-06T23:15:08.743 に答える