로그
- 기록을 남기는 것
- 앱 개발시 운영 중 발생하는 문제점을 모니터링하거나 추적하는 데 용이하다.
- 데이터를 분석해 통계를 낼 수도 있다.
스프링 부트 로그
- 스프링부트 공식 문서
- 스프링부트 공식 문서2
- JCL(Jakarta Commons Logging) : 로깅 추상화 라이브러리
- Log4j2, Logback
- JCL 구현체를 선택하는 시점 == 런타임 ➡️ 클래스 로더에 의존적이다.
- 런타임 시점에 JCL이 지정된 클래스 로더에 대해 참조하고 있으면 해당 클래스 로더에 의해 로드된 리스소가 가비지 컬렉션 수집을 방해한다. ➡️ 메모리 누수가 발생한다 == 가비지 컬렉션이 제대로 동작하지 않는다.
- ➡️ 컴파일 시점에 구현체를 선택하도록 변경 ➡️ SLF4J
- SLF4J Bridging, API, Binding 모듈을 제공하여 컴파일 시점에 로깅 구현체를 결정한다.
- Bridging : 어댑터 역할, SLF4J API 인터페이스와 로깅 구현체를 연결해준다.
- Bridge : 로거 호출을 SLF4J 인터페이스로 연결해준다.
- 기본 : Logback
Logback
- 공식문서
- Java 기반 로깅 프레임워크
- logback-core, logback-classic, logback-access
logback-core
: 로깅 프레임워크의 핵심 기능을 제공한다.
logback-access
: 서블릿 컨테이너와 통합하여 HTTP 액세스 로그를 작성하는 데 사용할 수 있다.
logback-classic
의 Logger 클래스는 기본적으로 slf4j API를 구현한다.
- slf4j의 구현체 ➡️ 스프링 부트 환경이라면 별도의 의존성 추가 없이 기본적으로 포함되어 있다.
- logback-classic은 수정시 구성 파일을 자동으로 리로드할 수 있다.