[SpringBoot] slf4j, logback, log4j
로그(log)는 소프트웨어의 이벤트를 기록하는 것으로써, 소프트웨어의 동작상태를 파악하고 문제가 발생했을 때 이 동작 파악을 통해서 소프트웨어의 문제를 찾아내고 해결하기 위해 디자인 되었다. 즉, 소프트웨어의 디버깅이나 모니터링을 위하여 정보를 기록하는 곳에 사용되는데 기존의 Debugger나 println에 비해 로그는 다음과 같은 장점이 있다.
- 상황별 level을 지정하여 level별 메세지를 선택가능
- 응용 프로그램의 실행에 대한 흐름과 에러 확인 가능
- 프레임워크를 이용하여 간단하고 쉬운 사용환경 조성 가능
- 모듈 별로 유연하게 메세지 출력 가능
- 자유로운 출력 위치 및 다양한 출력 형식 지원
Java에서는 이러한 로그에 대해 여러 프레임워크가 존재한다. 로깅 프레임워크에는 slfj4j, log4j, logback, log4j2등 과 같은 것들이 존재하고 이것들에 대해 알아보았다.
slf4j란
slf4j는 Simple Logging Facade For Java의 약자로써 자체적인 로깅 프레임워크가 아니고 logger 추상체로써 다른 로깅 프레임워크가 접근할 수 있도록 도와주는 추상화 계층이다. 즉, logback이나 log4j2와 같은 로깅 프레임워크의 인터페이스의 역할을 해준다. 따라서 slf4j2를 이용하면 코드를 일정하게 유지하면서 구현체의 전환을 통해 다른 로깅 프레임워크로의 전환을 쉽고 간단하게 할 수 있다. 한마디로 이 녀석만으로는 사용할 수 없다는 얘기다. log4j나 lobback같은 라이브러리와 결합하여 slf4j 방식으로 로그를 남길 수 있다.
Log4j란
log4j는 가장 오래된 로깅 프레임워크로써 Apache의 Java기반 로깅 프레임워크이다. 콘솔 및 파일 출력의 형태로 로깅을 도와주며 xml, properties로 환경을 구성할 수 있다. 현재는 2015년 기준으로 개발이 중단되었다. log4j는 다음과 같은 구성을 가지고 있다.
log4j의 구성
log4j의 로그 레벨
FATAL > ERROR > WARN > INFO > DEBUG > TRANCE
logback이란
logback이란 log4j 이후에 출시된 보다 향상되고 가장 널리 사용되고 있는 Java 로깅 프레임워크중 하나이다. slf4j의 구현체로써 동작하는 logback은 Springboot 환경의 경우는 spring-boot-starter-logging안에 logback이 기본적으로 포함되어 있어서 별다른 dependency 추가 없이 사용할 수 있다.
logback은 log4j에 비해 향상된 필터링 정책 및 기능과 로그 레벨 변경등에 대해 서버 재시작 없는 자동 리로딩을 지원해준다.
log4j2
가장 최신에 나온 로깅 프레임워크로써 Apache의 log4j 다음 버전이다. logback처럼 필터링 기능과 자동 리로딩을 지원한다. logback과의 가장 큰 차이는 Multi Tread 환경에서 비동기 로거(Async Logger)의 경우 다른 로깅 프레임워크보다 처리량이 훨씬 많고, 대기 시간이 훨씬 짧다. 또한, Java8부터 도입된 람다식을 지원하고, Lazy Evalutaion을 지원한다.
출처
logging.apache.org/log4j/2.x/performance.html
www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:logging:log4j_2:%EC%84%A4%EC%A0%95_%ED%8C%8C%EC%9D%BC%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94_%EB%B0%A9%EB%B2%95
jeong-pro.tistory.com/154
bcho.tistory.com/1312
www.slf4j.org/manual.html