원인: org.apache.logging.log4j.Logging Exception: log4j-slf4j-impl은 log4j-to-slf4j와 함께 사용할 수 없습니다.
Spring Boot 2 프로젝트에서:
인build.gradle
:
dependencies {
implementation 'com.google.code.gson:gson:2.7'
implementation 'com.h2database:h2'
implementation 'javax.servlet:jstl:1.2'
implementation 'org.springframework.boot:spring-boot-devtools'
implementation('org.springframework.boot:spring-boot-starter') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation "org.springframework.boot:spring-boot-starter-web"
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2'
}
인src/resources/log4j2.xml
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="Console"
class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<!-- l, L, M - is extremely slow. It's use should be avoided unless execution
speed is not an issue. -->
<param name="ConversionPattern"
value="%p: %d{dd.MM.yyyy HH:mm:ss.SSS} %l %n %m%n"/>
</layout>
</appender>
<appender name="File"
class="org.apache.log4j.DailyRollingFileAppender">
<param name="Encoding" value="UTF-8"/>
<param name="File" value="logs/trace.log"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<!-- l, L, M - is extremely slow. It's use should be avoided unless execution
speed is not an issue. -->
<param name="ConversionPattern"
value="%p: %d{dd.MM.yyyy HH:mm:ss.SSS} %l %n %m%n"/>
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.journaldev.spring">
<level value="info"/>
</logger>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info"/>
</logger>
<logger name="org.hibernate">
<level value="info"/>
</logger>
<logger name="org.springframework.beans">
<level value="info"/>
</logger>
<logger name="org.springframework.context">
<level value="info"/>
</logger>
<logger name="org.springframework.web">
<level value="info"/>
</logger>
<!-- The root category is used for all loggers unless a more specific logger
matches. If none of the loggers are assigned a level, then all loggers inherit
the level of the root logger which is set to DEBUG by default -->
<root>
<level value="ALL"/>
<appender-ref ref="Console"/>
<!-- <appender-ref ref="File" /> -->
</root>
</log4j:configuration>
내 컨트롤러:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class CategoryController {
private CategoryRepository categoryRepository;
private static Logger logger = LoggerFactory.getLogger(CategoryController.class);
@GetMapping("/categories")
public String getCategories(Model model) {
logger.debug("getCategories>>>>>>>>>>>>>>>>");
model.addAttribute("categoryList", this.categoryRepository.findAll());
return "categories/category_list";
}
}
그러나 프로젝트를 시작하면 다음과 같은 오류가 발생합니다.
원인: org.apache.logging.log4j.Logging Exception: log4j-slf4j-impl은 log4j-to-slf4j와 함께 사용할 수 없습니다.
Spring 문서(Simon이 지적한 바와 같이)에 따르면 "Spring-boot-starter-logging" 모듈을 "spring-boot-starter-web"뿐만 아니라 모든 라이브러리에서 제외하려고 합니다.
configurations {
...
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
...의...의...
dependencies {
...
implementation('org.springframework.boot:spring-boot-starter') {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
나 자신도 같은 문제를 안고 이 해결책으로 해결했다.
스프링 부츠2.3.0.RELEASE
버전에서는 Log4j2가 클래스 경로에 있는 경우 로깅 구성을 기본적으로 지원합니다.이 경우 다른 log4j 종속성을 제거할 수 있습니다.
다른 경우 종속성을 어셈블하기 위해 시작 프로그램을 사용하는 경우 로그백을 제외하고 대신 log4j 2를 포함해야 합니다.
그래들한테도 그렇게 할 수 있어
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
}
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
또는 Maven과 함께:
<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>
</dependency>
공식 문서에 대한 자세한 내용은http://https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ #how to-configure-log4j-for-for-for-for-for-for-facebooks
build.gradle에서 spring boot logging을 제외했는데 아직 문제가 발생하고 있습니다.제거함으로써 해결되었습니다.org.apache.logging.log4j/log4j-slf4j-impl/2.12.1
.classpath에서
오류 로그에서 제외할 프로젝트를 결정합니다.
예를 들어 다음과 같은 오류 메시지: 원인: org.apache.logging.log4j.Logging Exception: log4j-slf4j-impl은 log4j-to-slf4j gradle exclude를 사용했습니다.
설정을 지정합니다.all { exclude group: 'syslog.syslog.log4j'
}
클래스 패스를 수정한 후에도 STS에서 같은 문제가 발생했고 Gradle 'Refresh All'에서 해결했습니다.
이 문제를 해결하는 가장 좋은 방법은 gradle 의존관계를 실행하여 log4j-to-slf4j의 출처를 특정하고 build.gradle에서 이 모듈을 제외하는 것입니다.
언급URL : https://stackoverflow.com/questions/59629214/caused-by-org-apache-logging-log4j-loggingexception-log4j-slf4j-impl-cannot-be
'IT' 카테고리의 다른 글
가치와 같은 이름의 리액트 소품 (0) | 2023.02.14 |
---|---|
Wordpress는 언제 메타박스에 hide-if-js 클래스를 추가합니까? (0) | 2023.02.14 |
스프링 부츠 - 이미 부모 폼을 가지고 있는 경우 부모 폼 (0) | 2023.02.14 |
HttpResponse에서 json 가져오기 (0) | 2023.02.14 |
WordPress WooCommerce - WC_Cart 클래스를 사용하여 카트에 변수 제품 추가 (0) | 2023.02.14 |