Wygląda na to, że Springboot automatycznie konfiguruje się do używania Logback z Tomcat. Chciałbym to wyłączyć i użyć tego, który podam w mojej ścieżce klas.
Komunikat o błędzie poniżej.
LoggerFactory nie jest Logback LoggerContext, ale Logback znajduje się w ścieżce klasy. Usuń Logback lub konkurencyjną implementację (klasa org.slf4j.impl.SimpleLoggerFactory). Obiekt klasy [org.slf4j.impl.SimpleLoggerFactory] musi być instancją klasy 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>
spring-boot
BLA
źródło
źródło
java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
.Aby dodać lepsze, bardziej ogólne rozwiązanie w Gradle (wszystkie wystąpienia zostaną wykluczone):
Od https://docs.gradle.org/current/userguide/dependency_management.html
źródło
spring-boot-starter-logging
Aby dodać rozwiązanie w gradle.
źródło
Okazało się, że wykluczenie pełnego
spring-boot-starter-logging
modułu nie jest konieczne. Wszystko, co jest potrzebne, to wykluczyćorg.slf4j:slf4j-log4j12
moduł.Dodanie tego do pliku kompilacji Gradle rozwiąże problem:
Aby uzyskać więcej informacji, zobacz tę inną odpowiedź StackOverflow .
źródło
Lubię to, aby rozwiązać mój problem
źródło
Dla gradle,
Możesz zobaczyć to rozwiązanie pod adresem : http://www.idanfridman.com/how-to-exclude-libraries-from-dependcies-using-gradle/
Wystarczy dodać
exclude
wconfigurations
:źródło
Znajdź test spring-boot-starter-test w swoim pom.xml i zmodyfikuj go w następujący sposób:
Naprawiono błąd, taki jak:
źródło
Poniższe działa dla mnie
źródło
Może pomóc, jeśli powiesz, jaki dokładnie jest twój preferowany program rejestrujący i co zrobiłeś, aby go zainstalować. W każdym razie, Spring Boot próbuje pracować ze wszystkim, co znajduje się w ścieżce klas, więc jeśli nie chcesz logback, usuń to ze ścieżki klas. Są to instrukcje log4j w docs , ale to samo będzie dotyczyć innych obsługiwanych systemów rejestrowania (wszystko slf4j, Log4J lub java util).
źródło
Rozwiązałem swój problem w następujący sposób:
źródło
To zadziałało dla mnie dobrze
Ale to nie zadziała dla użytkowników maven . Wszystkie moje zależności znajdowały się w libs.gradle i nie chciałem ich w innych plikach. Więc ten problem został rozwiązany przez dodanie
exclude module : 'spring-boot-starter-logging
wspring-boot-starter-data-jpa
,spring-boot-starter-test
i praktycznie wszystko z bagażnika słowa.AKTUALIZACJA
Mój nowy projekt wymagał aktualizacji, okazuje się, że
spring-boot-starter-test
1.5 i starsze nie miałyspring-boot-starter-logging
. 2.0 ma toźródło
W moim przypadku wystarczyło tylko wykluczyć
spring-boot-starter-logging
artefakt z tegospring-boot-starter-security
jednego.Znajduje się w nowo wygenerowanym projekcie Spring Boot 2.2.6.RELEASE zawierającym następujące zależności:
Dowiedziałem się biegając
mvn dependency:tree
i szukającch.qos.logback
.Wiosenny but związany
<dependencies>
z moimpom.xml
wyglądem wygląda tak:źródło
Dodaj to do pliku build.gradle
źródło
Jeśli ten błąd wystąpił w SpringBoot podczas próby użycia log4j2, wykonaj następujące kroki:
Ten błąd wystąpił, ponieważ logowanie zwrotne zastępuje zmiany log4j2. Więc jeśli chcesz używać log4j2, musisz usunąć bibliotekę logback i zależności.
Mam nadzieję, że to komuś pomoże.
źródło
Poprawny sposób wykluczenia domyślnego rejestrowania i skonfigurowania log4j do rejestrowania.
Zobacz Spring Logging - jak to zrobić .
źródło
Aby dodać wykluczenie dla wylogowania z Netbeans IDE
Kliknij prawym przyciskiem myszy słoik i wybierz opcję Wyklucz zależność, jak pokazano poniżej. To wyklucza słoik logback w pom.xml w ten sposób;
źródło
W moim przypadku poniższe wykluczenie działa !!
źródło
Samo dodawanie wykluczeń mi nie wystarczało. Musiałem dostarczyć fałszywy słoik:
źródło
Powodem jest to, że Spring Boot ma domyślną konfigurację dziennika z logback, podczas gdy camel używa log4j. To jest przyczyna konfliktu. Masz dwie opcje, albo usuń logback z bagażnika sprężynowego, jak wspomniano w powyższych odpowiedziach, albo usuń log4j z camela.
źródło
Po prostu dodaj konfigurację logback.xml do swojej ścieżki klas i dodaj całą konfigurację z dodanym rootem appender. Gdy Spring boot zakończy ładowanie fasoli, rozpocznie rejestrowanie w oparciu o twoją konfigurację.
źródło