Il semble que Springboot se configure automatiquement pour utiliser Logback avec Tomcat. Je voudrais désactiver ceci et utiliser celui que je fournis dans mon classpath.
Le message d'erreur ci-dessous.
LoggerFactory n'est pas un Logback LoggerContext mais Logback est sur le chemin de classe. Supprimez Logback ou l'implémentation concurrente (classe org.slf4j.impl.SimpleLoggerFactory). L'objet de la classe [org.slf4j.impl.SimpleLoggerFactory] doit être une instance de la classe ch.qos.logback.classic.LoggerContext
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>1.0.1.RELEASE</version>
</parent>
<groupId>com.fe</groupId>
<artifactId>cloudapp</artifactId>
<version>1.0.0</version>
<name>Withinet-PaaS</name>
<description>Develop your web applications in on our infrastructure and we will worry about administration and scalability of your app.</description>
<properties>
<Java.version>1.7</Java.version>
<guava.version>16.0.1</guava.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.Sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.withinet.cloudapp</groupId>
<artifactId>slave</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.Apache.wicket</groupId>
<artifactId>wicket-core</artifactId>
<version>6.15.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.0.Final</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Hibernate validator -->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.1.0.Final</version>
</dependency>
<!-- Guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
<!-- Java EE -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Search -->
<dependency>
<groupId>org.Apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>4.8.0</version>
</dependency>
<!-- Security
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-Tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Spring Boot Maven -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.withinet.cloud.Application</mainClass>
<layout>JAR</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Ajoutez une exclusion à la fois au printemps-démarrage-démarreur et au printemps-démarrage-démarreur-web pour résoudre le conflit.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Pour ajouter une meilleure solution plus générique dans Gradle (toutes les instances seront exclues):
configurations {
all*.exclude module : 'spring-boot-starter-logging'
}
De https://docs.gradle.org/current/userguide/dependency_management.html
Ajouter une solution en dégradé.
dependencies {
compile ('org.springframework.boot:spring-boot-starter') {
exclude module : 'spring-boot-starter-logging'
}
compile ('org.springframework.boot:spring-boot-starter-web') {
exclude module : 'spring-boot-starter-logging'
}
}
J'aime ça pour résoudre mon problème
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
J'ai trouvé que l'exclusion du module complet spring-boot-starter-logging
n'est pas nécessaire. Il suffit d'exclure le module org.slf4j:slf4j-log4j12
.
Ajouter ceci à un fichier de construction Gradle résoudra le problème:
configurations {
runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
compile.exclude group: "org.slf4j", module: "slf4j-log4j12"
}
Voir cet autre StackOverflow réponse pour plus de détails.
Pour le grade,
Vous pouvez voir cette solution à: http://www.idanfridman.com/how-to-exclude-libraries-from-dependcies-using-gradle/
Il suffit d’ajouter exclude
dans configurations
:
configurations {
providedRuntime
compile.exclude(group: 'ch.qos.logback')
}
Suivre pour moi
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Recherchez spring-boot-starter-test dans votre fichier pom.xml et modifiez-le comme suit:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<exclusions>
<exclusion>
<artifactId>commons-logging</artifactId>
<groupId>commons-logging</groupId>
</exclusion>
</exclusions>
<scope>test</scope>
</dependency>
Il a corrigé une erreur comme:
_Caused by: Java.lang.IllegalArgumentException:_ **LoggerFactory** is not a **Logback LoggerContext** but *Logback* is on the classpath.
Either remove **Logback** or the competing implementation
(_class org.Apache.logging.slf4j.Log4jLoggerFactory_
loaded from file:
**${M2_HOME}/repository/org/Apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2.jar**).
If you are using WebLogic you will need to add **'org.slf4j'** to prefer-application-packages in WEB-INF/weblogic.xml: **org.Apache.logging.slf4j.Log4jLoggerFactory**
J'ai résolu mon problème par ceci ci-dessous:
compile('org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.0'){
exclude module: 'log4j-slf4j-impl'
exclude module: 'logback-classic'
}
compile('org.springframework.boot:spring-boot-starter-web'){
exclude module: 'log4j-slf4j-impl'
exclude module: 'logback-classic'
}
Cela a bien fonctionné pour moi
configurations {
all*.exclude module : 'spring-boot-starter-logging'
}
Mais cela ne fonctionnerait pas pour maven utilisateurs. Toutes mes dépendances étaient dans libs.gradle et je ne les voulais pas dans d'autres fichiers. Donc ceci le problème a été résol en ajoutant exclude module : 'spring-boot-starter-logging
dans spring-boot-starter-data-jpa
, spring-boot-starter-test
et dans pratiquement tout avec boot Word.
UPDATE
Mon nouveau projet nécessitait une mise à jour, spring-boot-starter-test
1.5 et plus ancien n’avait pas spring-boot-starter-logging
. 2.0 l'a
Ajoutez ceci dans votre build.gradle
configurations.all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-Tomcat'
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
exclude group: 'org.springframework.boot', module: 'logback-classic'
}
Cela pourrait être utile si vous dites exactement quel est votre enregistreur préféré et ce que vous avez fait pour essayer de l’installer. Quoi qu'il en soit, Spring Boot essaie de travailler avec tout ce qui se trouve dans le chemin de classe. Par conséquent, si vous ne voulez pas vous connecter, supprimez-le du chemin de classe. Il existe des instructions pour log4j dans la documentation , mais la même chose s’appliquerait à d’autres systèmes de journalisation pris en charge (tout ce que slf4j, log4j ou Java util).
Si cette erreur s'est produite dans SpringBoot lorsque vous essayez d'utiliser log4j2, procédez comme suit:
Cette erreur est survenue car logback annule les modifications log4j2. SO si vous souhaitez utiliser log4j2, vous devez supprimer la bibliothèque de retour en journal et les dépendances.
J'espère que cela aidera quelqu'un.
Pour ajouter une exclusion pour la journalisation à partir de l'EDI Netbeans
Faites un clic droit sur le pot et sélectionnez Exclure la dépendance comme indiqué ci-dessous. Cela exclut le fichier journal sur le pom.xml comme ceci;
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Méthode correcte pour exclure la journalisation par défaut et configurer log4j pour la journalisation.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
Reportez-vous à journalisation du printemps - Comment .
Ajoutez simplement la configuration logback.xml dans votre chemin de classe et ajoutez toute votre configuration avec l’appender root ajouté. Une fois que le démarrage de Spring a terminé le chargement du bean, il commence la journalisation en fonction de votre configuration.