web-dev-qa-db-fra.com

Utilisation de log4j2 avec slf4j: Java.lang.StackOverflowError

J'ai donc essayé de suivre this (implémentation non-maven) et les exigences dans leur site web pour ajouter slf4j à log4j. et a essayé d'utiliser ce code

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

et ajouté ce qui suit à ma bibliothèque

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

lorsque j'essaie de l'exécuter, j'obtiens l'erreur suivante

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)...

Une idée où je me trompe?

19
Akshay

Vous créez une boucle d'appel avec log4j-slf4j-impl-2.3.jar et log4j-to-slf4j-2.3.jar.

log4j-slf4j-impl-2.3.jar est l'implémentation de l'adaptateur qui envoie des appels slf4j à log4j.

log4j-to-slf4j-2.3.jar renvoie les appels log4j directement à slf4j. Retirez celui-ci.

41
Andreas