티스토리 뷰

로그(log)는 소프트웨어의 이벤트를 기록하는 것으로써, 소프트웨어의 동작상태를 파악하고 문제가 발생했을 때 이 동작 파악을 통해서 소프트웨어의 문제를 찾아내고 해결하기 위해 디자인 되었다. 즉, 소프트웨어의 디버깅이나 모니터링을 위하여 정보를 기록하는 곳에 사용되는데 기존의 Debugger나 println에 비해 로그는 다음과 같은 장점이 있다.

 

  • 상황별 level을 지정하여 level별 메세지를 선택가능
  • 응용 프로그램의 실행에 대한 흐름과 에러 확인 가능
  • 프레임워크를 이용하여 간단하고 쉬운 사용환경 조성 가능
  • 모듈 별로 유연하게 메세지 출력 가능
  • 자유로운 출력 위치 및 다양한 출력 형식 지원

Java에서는 이러한 로그에 대해 여러 프레임워크가 존재한다. 로깅 프레임워크에는 slfj4j, log4j, logback, log4j2등 과 같은 것들이 존재하고 이것들에 대해 알아보았다.

 

slf4j란

slf4j는 Simple Logging Facade For Java의 약자로써 자체적인 로깅 프레임워크가 아니고 logger 추상체로써 다른 로깅 프레임워크가 접근할 수 있도록 도와주는 추상화 계층이다. 즉, logback이나 log4j2와 같은 로깅 프레임워크의 인터페이스의 역할을 해준다. 따라서 slf4j2를 이용하면 코드를 일정하게 유지하면서 구현체의 전환을 통해 다른 로깅 프레임워크로의 전환을 쉽고 간단하게 할 수 있다. 한마디로 이 녀석만으로는 사용할 수 없다는 얘기다. log4j나 lobback같은 라이브러리와 결합하여 slf4j 방식으로 로그를 남길 수 있다.

 

로깅 프레임워크의 인터페이스의 역할을 하는 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을 지원한다. 

Multi Tread 환경에서 로깅 프레임워크 성능 비교

 

 

출처

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