반응형
log4j2 를 버전업 하는데 다음의 문제가 발생한다.
build.gradle (Gradle로 설정)
...
implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: "2.17.1"
implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: "2.17.1"
implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: "2.17.1"
...
에러메세지
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/dgpark/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-slf4j-impl/2.17.1/84692d456bcce689355d33d68167875e486954dd/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/dgpark/.gradle/caches/modules-2/files-2.1/ch.qos.logback/logback-classic/1.2.3/7c4f3c474fb2c041d8028740440937705ebb473a/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" java.lang.ExceptionInInitializerError
at org.springframework.boot.builder.SpringApplicationBuilder.createSpringApplication(SpringApplicationBuilder.java:109)
at org.springframework.boot.builder.SpringApplicationBuilder.<init>(SpringApplicationBuilder.java:97)
at com.nate.uapsof.UapsMainSpring.init(UapsMainSpring.java:42)
at com.nate.uapsof.UapsMainSpring.<init>(UapsMainSpring.java:31)
at com.nate.uapsof.UapsMainSpring.getInstance(UapsMainSpring.java:36)
at com.widetns.tester.Main.main(Main.java:9)
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
at org.apache.logging.slf4j.Log4jLoggerFactory.validateContext(Log4jLoggerFactory.java:60)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:44)
at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:33)
at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:53)
at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:33)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:363)
at org.apache.commons.logging.LogAdapter$Slf4jAdapter.createLocationAwareLog(LogAdapter.java:130)
at org.apache.commons.logging.LogAdapter.createLog(LogAdapter.java:91)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:67)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:59)
at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:206)
... 6 more
Process finished with exit code 1
Spring boot의 경우 기본 logging 설정은 logback 이다. 그런데 log4j2 를 사용하려다보니 에러가 발생한 것이다. 해킹이슈로 인해 log4j2 버전을 올렸더니 기존 로깅 시스템과 문제가 발생한 것.
여기서 log4j2를 쓸건지 logback을 사용할 것인지 판단이 필요하지만, 우선 포스팅은 log4j2 를 선택했다는 가정하에 진행한다.
우선 로그를 보면 multiple SLF4J bindings 이라고 떠 있는데, log4j와 logback 이 충돌되어 그렇다.
log4j는 직접 설정했지만, 다른 dependency를 추가하면서 logback 이 자동주입되 둘이 충돌되는 것이다.
우선 logback 을 제외 시키도록 설정한다
configurations {
all {
exclude group: 'ch.qos.logback', module: 'logback-classic'
}
}
그랬더니 이번에는 다른 에러문구가 보인다. 첫번째 에러는 해결이 되었는데 아래 문제가 생긴 것이다.
에러메세지
Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j-impl cannot be present with log4j-to-slf4j
...
log4j-slf4j-impl 과 log4j-to-slf4j 는 함께 존재할 수 없다는 문구다.
그래서 dependency에 추가했던 log4j-slf4j-impl 를 제거해보았지만 여전했다. 다른 dependency 떄문에 불러와지는 듯 하다.
그래서 log4j-to-slf4j 를 제외하기로 한다.
configurations {
all {
exclude group: 'ch.qos.logback', module: 'logback-classic'
exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j'
}
}
또는 spring logging 을 제거해도 된다
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
끝.
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
swagger-ui 사용 시 spring security에 경로 등록 (0) | 2022.02.21 |
---|---|
[react] window is not defined 에러 (apexchart) (0) | 2022.01.12 |
[log4j] runtime 중 레벨 변경(@Slf4j 같이 적용) (0) | 2021.12.20 |
[linux] ec2(aws) 에서 jenkins 설치 중 demonize 에러가 발생할경우 (0) | 2021.12.13 |
[log4j] 로그레벨 package 별로 설정하기 (0) | 2021.12.03 |
댓글