web-dev-qa-db-ja.com

slf4jでlog4j2を使用する:Java.lang.StackOverflowError

そのため、私は this (非Maven実装)と、slf4jをlog4jに追加するための webサイト の要件に従ってみました。このコードを使用してみました

public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Main.class);
        logger.info("test");
    }

私のライブラリに次を追加しました

  • log4j-api-2.3.jar
  • log4j-core-2.3.jar
  • log4j-sl4j-impl-2.3.jar
  • log4j-to-sl4j-2.3.jar
  • slf4j-api-1.7.12.jar

実行しようとすると、次のエラーが表示されます

Exception in thread "main" Java.lang.StackOverflowError
    at Java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.Java:936)
    at Java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.Java:964)
    at org.Apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.Java:40)
    at org.Apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.Java:37)
    at org.Apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.Java:29)
    at org.Apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.Java:47)
    at org.Apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.Java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.Java:284)
    at org.Apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.Java:41)
    at org.Apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.Java:37)
    at org.Apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.Java:29)
    at org.Apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.Java:47)
    at org.Apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.Java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.Java:284)...

私が間違っている場所は何ですか?

19
Akshay

log4j-slf4j-impl-2.3.jarlog4j-to-slf4j-2.3.jarを使用して呼び出しループを作成しています。

log4j-slf4j-impl-2.3.jarは、slf4j呼び出しをlog4jに送信するアダプターの実装です。

log4j-to-slf4j-2.3.jarはlog4j呼び出しをslf4jにすぐに送信しています。 これを削除

41
Andreas