빵구의 개발 메꾸기

slf4j VS log4j VS logback VS log4j2 본문

BACK-END/JAVA

slf4j VS log4j VS logback VS log4j2

bkjo94 2022. 5. 2. 23:09

logging은 클라이언트에서 서버쪽으로 이벤트가 발생하여 데이터를 보낼 때 시스템의 상태에 대해 기록으로

남기는 것을 의미한다.

이 기록을 log라고 한다.

주로 시스템의 문제가 발생했을 시 log를 통해 원인을 파악하고 조치하기 위해 사용한다.

JDK 1.4 부터 logging 라이브러리가 내장되어 있지만 활용하기에 부족한 부분이 많고 유연하지 못한 부분이 존재했다.

또한 system.out.println() 메서드를 활용하여 기록을 남길 수 있지만 비효율적인 메모리사용과 안정적이지 못한

단점이 있기 때문에 개선하기 위해 log 관련 다양한 framework들이 생겨나게 되었다.

장점으로는 각 단계 별 상황에 맞는 메세지를 전달 가능하다.

 

<slf4j>

slf4jSimple Logging Facade For Java의 약자이며 logger의 추상체로써 다른 로깅 프레임워크의 인터페이스이다.

 

<logback>

logbackjava에서 logging을 하기 위한 라이브러리이며 slf4j의 구현체이다.

log4j 보다는 늦고 log4j 보다는 전에 개발 되었으며 log4j 보다 향상 된 성능과 필터링을 제공한다.

log 설정 변경 시 서버를 재시작할 필요가 없는 자동 리로드가 가능하다.

스프링부트에서는 기본으로 사용하고 있기 때문에 별도로 추가할 필요가 없다.

 

<log4j>

log4j는 제일 오래 된 logging framework이며 마찬가지로 slf4j의 구현체이다.

Log For Java의 약자이다.

2015년에 개발은 중단되었으나 사람들이 다년간 사용해온 가장 인기있는 라이브러리였다.

하지만 log level을 변경하게 되는 경우 서버를 재시작해야 되는 단점이 있다.

- 구조

Logger
log
메세지를 Appender에게 전달한다.

Appender
받은
log 메세지를 어디에 출력 할 것인지 결정한다.

(File, Console, DB)

Layout 받은 log 메시지를 어디에 출력 할 것인지 결정했다면 어떤 형식으로 출력할 것인지 Layout을 결정한다.

 

- log level 종류

FATAL 매우 심각한 에러가 발생한 경우 메세지를 담을 때 사용
ERROR 요청을 처리하는 중 문제 발생한 경우 메세지를 담을 때 사용
WARN 실행에는 문제가 없지만 잠재적인 문제가 발생할 여지가 있는 경고성 메세지를 담을 때 사용
INFO 정보성 메세지를 담을 때 사용
DEBUG 개발 시 디버그 용도의 메세지를 담을 때 사용
TRACE DEBUG level 보다 상세한 메세지를 담을 때 사용

 

level 순서 : FATAL > ERROR > WARN > INFO > DEBUG > TRACE

 

<log4j2>

log4j2는 가장 최근에 나온 logging 라이브러리이며 마찬가지로 slf4j의 구현체이고 제일 빠르다.

멀티쓰레드 환경에서 압도적으로 처리량이 많고 대기 시간이 짧다.

그렇기에 대용량 트래픽을 처리하는 환경에서 주로 사용한다.

log4jlogback의 단점을 보완하여 개발되었다.

람다식을 활용할 수 있으며 고급 필터링 옵션을 제공한다.

logback과 동일하게 log 설정 변경 시 서버를 재시작할 필요가 없는 자동 리로드가

가능하며 필터링을 제공한다.

log levellog4j와 동일하다.

Comments