log4j 취약점 사태에 따라서 프로젝트에 log4j 라이브러리를 변경해야 했다.
실제 프로젝트에서는 logback 을 사용중이었고 boot 버전은 2.2.4를 사용하고 있었고 spring-boot-starter-logging 을 사용중이었다. 이 라이브러리의 dependency 는 아래와 같다.
ch.qos.logback » logback-classic 1.2.3
org.apache.logging.log4j » log4j-to-slf4j 2.12.1
org.slf4j » jul-to-slf4j 1.7.30
출처 : https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-logging/2.2.4.RELEASE
1. sping-boot-starter-logging 을 제외하고 log4j 라이브러리를 추가했다.
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
dependencies{
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.15.0'
compile group: 'org.apache.logging.log4j', name: 'log4j-to-slf4j', version: '2.15.0'
.....
}
그리고 나서 어플리케이션을 실행시켜보니 다음과 같은 로그가 남았다.
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.4.RELEASE)
SLF4J: Failed to load class "org.slf4j.impl.StaticMDCBinder".
SLF4J: Defaulting to no-operation MDCAdapter implementation.
SLF4J: See http://www.slf4j.org/codes.html#no_static_mdc_binder for further details.
처음에는 어플리케이션이 실행이 안된건줄 알았는데 알고보니 로그가 안올라간것이었다. 그럼 왜 로그가 안나오는것일까??
일단 정확하지는 않지만 확인해본 바로는 프로젝트에서는 logback 을 사용중이었는데 sping-boot-starter-logging 라이브러리를 제외하는 바람에 logback 관련 라이브러리가 dependency 에 추가지되 않아서라는 추측을 하게 되었다.
2. 로그백 라이브러리 추가
dependencies{
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.7'
implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.7'
....
}
위와같이 로그백 라이브러리를 추가했다. 어플리케이션은 정상적으로 기동이 됐다. 그런데 다른 로컬 PC 에서 다시 SLF4J 관련 메세지가 나서 다시 수정을 했다.
3. sping-boot-starter-logging 제외 취소하고 log4j 만 추가.
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
1번에서 추가했던 위 부분을 삭제하고 2번에 추가했던 로그백 라이브러리도 삭제를 했다. 결과적으로는 log4j 라이브러리만 추가된 상황이다. 실제로 dependency를 확인해보면 다음과 같이 변경이 되어있다.
Gradle: org.apache.logging.log4j:log4j-api:2.15.0
Gradle: org.apache.logging.log4j:log4j-to-slf4j:2.15.0
어플리케이션도 정상적으로 잘 기동이 되었다.
이것때문에 구글에서 SLF4J 관련해서 계속 검색 하면서 삽질했는데 간단하게 해결이 됐다. ㅠㅠ
'Development > Java' 카테고리의 다른 글
@Access 어노테이션 (0) | 2022.06.03 |
---|---|
[Spring] Spring Cloud Config Server Error - Add a spring.config.import.... (0) | 2021.12.28 |
Spring Boot Test Case 작성에 대한 생각 - Controller Test (0) | 2021.02.18 |
Spring Boot Test Case 작성에 대한 생각 - Service Test (0) | 2021.02.17 |
Spring Boot Test Case 작성에 대한 생각 - Repository Test (0) | 2021.02.17 |