spring boot - springprofile - Deshabilitar el Logback en SpringBoot
spring boot logback file (11)
Agregue esto en su 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''
}
Parece que Springboot se autoconfigura para usar Logback con Tomcat. Me gustaría desactivar esto y usar el que proporciono en mi classpath.
El mensaje de error a continuación.
LoggerFactory no es Logback LoggerContext, pero Logback está en classpath. Elimine Logback o la implementación competidora (clase org.slf4j.impl.SimpleLoggerFactory) El objeto de la clase [org.slf4j.impl.SimpleLoggerFactory] debe ser una instancia de la clase 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>
Agregue la exclusión al spring-boot-starter y spring-boot-starter-web para resolver el conflicto.
<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>
Descubrí que no es necesario excluir el módulo de spring-boot-starter-logging
completo. Todo lo que se necesita es excluir el org.slf4j:slf4j-log4j12
.
Agregar esto a un archivo de compilación de Gradle resolverá el problema:
configurations {
runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
compile.exclude group: "org.slf4j", module: "slf4j-log4j12"
}
Vea esta otra answer para más detalles.
Encuentre spring-boot-starter-test en su pom.xml y modifíquelo de la siguiente manera:
<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>
Se corrigió el error como:
Causado por: java.lang.IllegalArgumentException: LoggerFactory no es un Logger LoggerContext, pero Logback está en el classpath.
Elimine Logback o la implementación de la competencia
( clase org.apache.logging.slf4j.Log4jLoggerFactory cargado desde el archivo: $ {M2_HOME} /repository/org/apache/logging/log4j/log4j-slf4j-impl/2.6.2/log4j-slf4j-impl-2.6.2. jar ).
Si está utilizando WebLogic, deberá agregar ''org.slf4j'' a los paquetes prefer-application en WEB-INF / weblogic.xml: org.apache.logging.slf4j.Log4jLoggerFactory
Me gusta esto para resolver mi problema
<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>
Para agregar una solución en gradle.
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''
}
}
Para agregar una solución mejor y más genérica en Gradle (se excluirán todas las instancias):
configurations {
all*.exclude module : ''spring-boot-starter-logging''
}
Desde https://docs.gradle.org/current/userguide/dependency_management.html
Para gradle,
Puede ver esta solución en: http://www.idanfridman.com/how-to-exclude-libraries-from-dependcies-using-gradle/
Solo necesita agregar exclude
en configurations
:
configurations {
providedRuntime
compile.exclude(group: ''ch.qos.logback'')
}
Puede ser útil que diga cuál es exactamente su registrador preferido y qué hizo para intentar instalarlo. De todos modos, Spring Boot intenta trabajar con lo que está en la ruta de clases, por lo que si no quieres logback, quítalo del classpath. Hay instrucciones para log4j en los documentos , pero lo mismo se aplicaría a otros sistemas de registro compatibles (cualquier cosa slf4j, log4j o java util).
Resolví mi problema a través de esto a continuación:
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''
}
Simplemente agregue la configuración de logback.xml en su classpath y agregue toda su configuración con el agregado de raíz agregado. Una vez que la bota Spring complete la carga del bean, comenzará el registro de acuerdo con su configuración.