Spring Boot에서 로그백을 무효로 하다
Springboot에서는 Tomcat에서 Logback을 사용하도록 자동으로 설정되어 있는 것 같습니다.이것을 무효로 하고, 클래스 패스에서 제공하는 것을 사용하고 싶습니다.
다음의 에러 메세지가 표시됩니다.
LoggerFactory는 Logback LoggerContext가 아니지만 Logback은 클래스 경로에 있습니다.Logback 또는 경쟁 구현(class org.slf4j.impl)을 삭제합니다.SimpleLoggerFactory) 클래스의 오브젝트 [org.slf4j.impl].SimpleLoggerFactory]는 클래스 ch.qos.logback.classic의 인스턴스여야 합니다.로거 콘텍스트
<?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-starter와 spring-boot-starter-web 모두에 제외를 추가합니다.
<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>
Gradle에서 보다 우수한 범용 솔루션을 추가하려면 다음 절차를 따릅니다(모든 인스턴스는 제외됩니다).
configurations {
all*.exclude module : 'spring-boot-starter-logging'
}
https://docs.gradle.org/current/userguide/dependency_management.html 에서
그라데로 용액을 첨가하다.
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'
}
}
기본 로깅을 제외하는 올바른 방법 및 로깅용으로 log4j를 구성합니다.
<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>
그래들에서는 다른 몇 가지 의존관계와 함께 이 작업을 수행해야 했습니다.
configurations {
all*.exclude module : 'spring-boot-starter-logging'
all*.exclude module : 'logback-classic'
}
나는 모든 것을 제외하고spring-boot-starter-logging모듈은 필요 없습니다.필요한 것은, 다음의 항목을 제외하는 것 뿐입니다.org.slf4j:slf4j-log4j12모듈.
이를 Gradle 빌드 파일에 추가하면 다음과 같은 문제가 해결됩니다.
configurations {
runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
compile.exclude group: "org.slf4j", module: "slf4j-log4j12"
}
자세한 내용은 다음 StackOverflow 응답을 참조하십시오.
그래들 같은 경우에는
이 솔루션은 http://www.idanfridman.com/how-to-exclude-libraries-from-dependcies-using-gradle/ 에서 보실 수 있습니다.
추가만 하면 됩니다.exclude에configurations:
configurations {
providedRuntime
compile.exclude(group: 'ch.qos.logback')
}
나는 내 문제를 해결하기 위해 이렇게 한다.
<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>
pom.xml에서 spring-boot-starter-test를 찾아 다음과 같이 변경합니다.
<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>
다음과 같은 오류를 수정했습니다.
_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**
원하는 로거가 무엇인지와 로거를 설치하려고 시도한 작업을 알려면 도움이 될 수 있습니다.어쨌든 Spring Boot은 클래스 패스에 있는 모든 것을 조작하려고 합니다.로그백을 하고 싶지 않은 경우는 클래스 패스에서 제외해 주세요.문서에는 log4j에 대한 지침이 있지만 지원되는 다른 로깅 시스템(slf4j, log4j 또는 java util)에도 동일하게 적용됩니다.
나는 팔로잉이 좋다.
<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>
저도 같은 문제예요.
사용하시는 경우log4j2
스프링 부트 중2.4.0
나는 다음과 같이 결심한다.
<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-log4j2</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId> <-- exclude this artifactId
</exclusion>
</exclusions>
</dependency>
그 후 Maven Build > Clean > Run 순으로 진행합니다.
날 위해 일해.
아래를 통해 문제를 해결했습니다.
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'
}
제 경우, 이 명령어를 제외하는 것만이 필요했습니다.spring-boot-starter-logging로부터의 인공물spring-boot-starter-security하나.
이것은 새로 생성된 스프링부트 2.2.6에 포함되어 있습니다.Release 프로젝트에는 다음과 같은 의존관계가 포함됩니다.
- 스프링 부츠 보안
- 스프링 부트 검증
- 스프링 부츠 웹
- 스프링 부트 테스트
달려서 알게 되었다.mvn dependency:tree찾고 있다ch.qos.logback.
스프링 부트 관련<dependencies>내 안에서pom.xml다음과 같습니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</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-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
이건 나한테 잘 먹혔어
configurations {
all*.exclude module : 'spring-boot-starter-logging'
}
하지만 maven 사용자들에게는 잘 되지 않을 것이다.모든 의존관계는 libs.gradle로 되어있었고 다른 파일로는 원하지 않았습니다.그래서 이 문제는 다음과 같이 추가함으로써 해결되었다.exclude module : 'spring-boot-starter-logging에spring-boot-starter-data-jpa,spring-boot-starter-test부트 워드와 함께 거의 모든 것을 할 수 있습니다.
갱신하다
내 새 프로젝트는 업데이트가 필요했고, 알고보니spring-boot-starter-test1.5 이상에서는spring-boot-starter-logging. 2.0에 있습니다.
이것을 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'
}
Gradle & Lombok을 사용하여 최신 스프링 부트(2.4.1)를 사용한 Log4j2의 가장 간단한 설정을 다음에 나타냅니다.
build.gradle(표준)
configurations {
compileOnly { extendsFrom annotationProcessor }
compile.exclude module: 'spring-boot-starter-logging'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web-services'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
compileOnly 'org.projectlombok:lombok'
// (*** other dependencies ***)
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
다음을 포함하면 오류가 발생한다는 것을 알았습니다.spring-bbot-starter-log4j2로서compileOnly로서가 아닌 의존성implementation.
수강생에게 주석을 달기만 하면 됩니다.@Log4j2(또는@Slf4j)와 lombok은 다음 중 하나를 사용할 수 있도록 합니다.log로그 작성에 사용할 수 있습니다.
기존과 같이log4j2.xml의 컨피규레이션파일/src/main/resources폴더입니다.
log4j2를 사용하려고 할 때 SpringBoot에서 이 오류가 발생한 경우 다음 절차를 수행합니다.
- 이 "excludeGroupIds log4j-slf4j-impl /excludeGroupIds"를 추가하여 팩킹 중에 에서 jar를 제거합니다.
- "mvn dependecy:tree" 명령을 사용하여 어떤 라이브러리가 "logback-classic"에 의존하는지 확인합니다.
- 어디서 찾든 의존관계에서 제외됩니다.
이 오류는 logback이 log4j2 변경 사항을 재정의하기 때문에 발생했습니다.따라서 log4j2를 사용하려면 로그백라이브러리와 의존관계를 삭제해야 합니다.
이게 누군가에게 도움이 되길 바랍니다.
클래스 경로에 logback.xml 구성을 추가하고 루트 appender를 추가한 모든 구성을 추가합니다.스프링 부트는 빈 로드가 완료되면 설정에 따라 로깅을 시작합니다.
Netbeans IDE에서 로그백 제외를 추가하려면
- 프로젝트의 > 프로젝트 탐색기 섹션에 액세스합니다.
- 다음과 같이 > 의존관계로 진행합니다.
- 'spring-boot-starter-logging-X.X.jar'를 추적합니다.
아래 그림과 같이 jar를 마우스 오른쪽 버튼으로 클릭하고 종속성 제외를 선택합니다.이것은 다음과 같은 pom.xml의 logback jar는 제외됩니다.
<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>
나의 경우는 아래 제외가 된다!!
<dependency>
<groupId>com.xyz.util</groupId>
<artifactId>xyz-web-util</artifactId>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
나는 제외를 추가하는 것만으로는 충분하지 않았다.가짜 항아리를 제공해야 했어요
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>system</scope>
<systemPath>${project.basedir}/empty.jar</systemPath>
</dependency>
그 이유는 스프링부트는 기본 로그 설정으로 logback이 포함되어 있는 반면 camel은 log4j를 사용하기 때문입니다.그것이 갈등의 원인이다.위의 답변과 같이 스프링 부트에서 로그백을 삭제하거나 camel에서 log4j를 삭제하는 두 가지 옵션이 있습니다.
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<version>${camel.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</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>
Spring Boot Starter에서 LogBack 또는 Log4j를 비활성화합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
</exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
언급URL : https://stackoverflow.com/questions/23984009/disable-logback-in-springboot
'programing' 카테고리의 다른 글
| json 파일을 컴파일하도록 typescript에 지시하다 (0) | 2023.03.06 |
|---|---|
| 필터와 $index에서 ng-repeat을 사용하는 방법 (0) | 2023.03.06 |
| Onclick function "is not defined" (0) | 2023.03.06 |
| CSS/SCSS 모듈을 가져올 수 없습니다.TypeScript에 "모듈을 찾을 수 없습니다"라고 표시됨 (0) | 2023.03.06 |
| 테마 드롭다운 메뉴를 호버 대신 OnClick으로 설정하려고 합니다. (0) | 2023.03.06 |


