본문 바로가기

Tech/Spring | SpringBoot

[SpringBoot] Logging - 1 (JCL, Slf4j, logback, log4j, log4j2)

반응형

1. Spring logging

예전의 Spring 은 JCL (Jakarta Commons Logging) 을 사용하여 로깅을 구현하였다. JCL 은 인터페이스 형태로 되어 있는데, 이를 구현한 구현체를 사용하여 여러 로깅 구현체로 교체하면서 사용할 수 있다.

 

JCL 의 구현체는 Configuration 을 통해서 설정할 수 있는데, JCL 이 구현체를 선택하는 시점은 컴파일 시점이 아닌 런타임 시점이다. 그렇기 때문에 JCL 은 클래스 로더에 의존적인 방식으로 로깅 구현체를 찾게된다.

 

JCL 은 클래스 로더를 통해 컴파일 시점에 로깅 구현체를 찾는 방식에서 가비지 컬렉션이 제대로 작동하지 않는 문제가 발생한다. 이러한 문제를 해결하기 위해 클래스 로더 대신에 컴파일 시점에 구현체를 선택하는 방식으로 변경되는데, 이때 도입되는 것이 Slf4j 이다.

 

Slf4j 는 Bridging, API, Binding 모듈을 제공하여 컴파일 시점에 로깅 구현체를 결정한다. 스프링부트 에서는 Logback 이 기본 구현체로 선택되어 있다.

2. Slf4j

Slf4j Simple Logging Facade For Java 약자이다.

자체적인 로깅 프레임워크, 라이브러리가 아니고 JCL 과 같은 logger 추상체로써 다른 로깅 프레임워크가 접근할 있도록 해주는 추상화 계층이다. 실제 로깅 프레임워크 구현체인 log4j logback 인터페이스 역할을 한다. 그렇기 때문에 Slf4j 이용하면 코드를 일정하게 유지하면서 구현체의 전환을 통해 다른 로깅 프레임워크로의 전환을 쉽게 있다.

3. log4j

log4j 는 가장 오래된 로깅 프레임워크로써 Apache java 기반 로깅 프레임워크이다. 콘솔 및 파일 출력의 형태로 로깅을 수행한다.

log4j.properties, log4j.xml 와 같은 설정 파일을 통해서 로깅 환경 설정을 구성할 수 있으며, 2015년 을 마지막으로 개발이 중단되었다.

- log4j 의 구성

Logger 출력할 메세지를 Appender 에게 전달한다.
Appender 전달된 로그를 어디에 출력할 것인지 결정한다. (Console, File, JDBC 등)
Layout 로그의 출력 형식을 결정한다.

- log4j 로그 레벨

FATAL > ERROR > WARN > INFO > DEBUG > TRACE

4. logback

logback log4j 이후에 출시된 로깅 프레임워크로 가장 널리 사용되고 있는 프레임워크 중 하나이다. sl4fj 의 구현체로써 Springboot 환경에서 spring-boot-starter-web 를 사용하는 경우 spring-boot-starter-logging logback 이 해당 라이브러리에 포함되어 있어서 추가적인 dependency 를 설정해 줄 필요없다.

 

log4j 에 비해 향상된 필터링 정책 및 기능과 로그 레벨 변경 등에 대해 서버 재시작 없는 자동 리로딩 등을 지원해준다.

 

일반적으로 logback 의 설정은 logback.xml 파일로 하는데, Springboot 에서는 logback-spring.xml 파일을 통해서 로그 관련 설정을 수행한다. logback-spring.xml 파일은 resources 디렉토리 아래에 위치한다.

5. log4j2

log4j2 는 가장 최신에 나온 로깅 프레임워크로 log4j 의 다음 버전이다. logback 처럼 필터링 기능과 자동 리로딩을 지원한다.

 

logback 과 가장 큰 차이는 multi thread 환경에서 비동기 로거의 경우 다른 로깅 프레임워크보다 처리량이 훨씬 많고 대기 시간이 짧다는 것이다. 또한, Java 8 부터 도입된 람다식을 지원하고 lazy evaluation 을 지원한다.

 

log4j2.xml 파일을 통해서 로그 환경을 설정한다.

[Reference]

- https://www.sangkon.com/hands-on-springboot-logging/

 

Spring Boot - Logging, 20분 정리

> 결론적으로 말하고 싶은건 프로젝트 시작시 Logback 부터 설정하자. 개발의 시작은 Logger 설정부터 아니겠는가? 스프링 부트의 로깅 잔혹사 태초에 스프링은 JCL(Jakarta Commons Logging) [https://commons.apa

www.sangkon.com

- 스프링 부트와 로깅

 

스프링 부트와 로깅

Spring Boot & Logging (KOREAN)

www.slideshare.net

- https://minkwon4.tistory.com/161

 

[Logging] slf4j, log4j, logback, log4j2

로그(log)는 소프트웨어의 이벤트를 기록하는 것으로써, 소프트웨어의 동작상태를 파악하고 문제가 발생했을 때 이 동작 파악을 통해서 소프트웨어의 문제를 찾아내고 해결하기 위해 디자인 되

minkwon4.tistory.com

 

반응형