web-dev-qa-db-fra.com

Je reçois "NoClassDefFoundError: org / Apache / logging / log4j / util / ReflectionUtil"

J'ai les dépendances suivantes dans mon fichier build.gradle.

compile 'org.slf4j:slf4j-api:1.7.25'
compile group: 'org.Apache.logging.log4j', name: 'log4j-core', version: '2.11.1'
compile group: 'org.Apache.logging.log4j', name: 'log4j-api', version: '2.11.1'

Lors de l'exécution de mes tests unitaires, les journaux suivants s'affichent.

exclude patterns:SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in 
[jar:file:....gradle/caches/modules-2/files-2.1/org.Apache.logging.log4j/log4j-slf4j-impl/2.7/382b070836b8940a02d28c936974db95e9bfc3a4/log4j-slf4j-impl-2.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/z002qz1/.gradle/caches/modules-2/files-2.1/org.Apache.logging.log4j/log4j-slf4j-impl/2.9.1/a97a849b18b3798c4af1a2ca5b10c66cef17e3a/log4j-slf4j-impl-2.9.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.Apache.logging.slf4j.Log4jLoggerFactory]
Java.lang.NoClassDefFoundError: org/Apache/logging/log4j/util/ReflectionUtil
at org.Apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.Java:42)
at org.Apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.Java:46)
at org.Apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.Java:29)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.Java:358)

J'utilise springboot 2.0.4.RELEASE. J'espère que ce n'est qu'une sorte de problème de non-correspondance de version. Toutes les idées sont appréciées.

6
hisdudeness

L'erreur: Java.lang.NoClassDefFoundError: org/Apache/logging/log4j/util/ReflectionUtil

est parce que log4j2 depuis la version 2.9.0 a été supprimé cette classe du pot api (log4j-api-2.x.x.jar).

La dernière version qui en est, est 2.8.2

Vous avez probablement des versions mixtes dans le chemin de classe.

10
devwebcl

La bonne façon de configurer log4j2 dans Spring Boot est la suivante:

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-starter-log4j2'
}

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

C'est expliqué dans la documentation .

1
Strelok