https://loosie.tistory.com/825
spring boot 는 기본적으로 JCL, Logback 을 사용
로깅 퍼사드
- JCL(Jakarta Commons Logging) 은 인터페이스
- https://articles.qos.ch/classloader.html
- JCL 구현체를 선택하는 시점이 런타임이라 클래스 로더에 의존적
- 클래스 로더가 특정 클래스나 리소스를 참조하고 있으면, 그 클래스나 리소스가 더 이상 필요 없더라도 메모리에서 제거되지 않을 수 있음, 메모리 누수를 유발할 수 있음
- 이러한 문제를 해결하기 위해 클래스 로더 대신 컴파일 시점에 구현체를 선택하도록 변경 → SLF4J
- SLF4J(Simple Logging Facade for Java)
- Bridging, API, Binding 모듈을 제공하여 컴파일 시점에 로깅 구현체를 결정
- SLF4J API는 로깅 인터페이스이다.
- SLF4J Binding은 말 그대로 어댑터 역할을 하여 SLF4J API 인터페이스와 로깅 구현체를 연결해준다. (예. slf4j-log4j12-{version}.jar)
- SLF4J Bridge는 로거 호출을 SLF4J 인터페이스로 연결해준다. (예. Log4J → SLF4J API)
log4j, logback
- log4j2
- deprecated된 log4j의 다음 버전
- Logback이 제공하는 기능 외에 여러 기능을 추가적으로 제공
- 더 빠름 (동기, 비동기 처리에서)
로그 레벨 설정
스프링부트 프로젝트의 로그레벨 설정은 아래 파일에서 가능
resources/application.properites / .yml
# Logging
logging.level.org.springframework=INFO
# logging.level.org.springframework.web=DEBUG
# logging.level.org.springframework.context.annotation=TRACE
logging:
level:
root: INFO
org.springframework: INFO
org.springframework.web: DEBUG
- DEBUG: 디버깅 정보. 개발 과정에서 시스템의 내부 상태를 파악하기 위해 사용.
- INFO: 일반 정보. 시스템의 주요 동작이나 상태 변화를 기록.
- WARN: 경고. 잠재적인 문제를 나타내지만 즉각적인 문제는 아님.
- ERROR: 오류. 시스템의 기능에 영향을 미치는 문제.
- FATAL: 치명적인 오류. 시스템의 실행을 중단해야 할 정도로 심각한 문제.
- 개발 환경: DEBUG 또는 INFO 수준의 로그를 활성화하여 문제를 신속하게 파악.
- 테스트 환경: INFO 수준의 로그를 활성화하여 주요 동작을 추적.
- 프로덕션 환경: WARN 이상 수준의 로그를 활성화하여 성능에 영향을 미치지 않으면서 중요한 문제를 감지.