본문 바로가기
프로젝트/Careers

Logging Framework는 어떤게 좋을까?

by 에어컨조아 2021. 8. 16.

프로그램 개발을 할때 중요한 요소 중 한 부분은 바로 로깅 처리입니다.

어떤 로깅 프레임워크를 사용할지, 로그레벨 정책은 어떻게 가져갈지 등에 대한 고민은 개발을 들어가기전 결정해야 됩니다. 최근 읽고있는 자바 성능 튜닝이야기 책을 통해 Log4j, Logback을 알게되었고 앞으로 진행해야될 프로젝트에 어떤 로깅 프레임워크를 적용할지 결정하려고 합니다.

자바에서는 Log4j → Logback → Log4j2 시간 순으로 로깅 프레임워크가 나왔습니다.

이들 중 각각의 성능을 비교해보도록 하겠습니다.

Log4j

  • 첫 로깅 프레임워크이며 그래서인지 SLF4J를 기본적으로 지원하지 않습니다. 그래서 별도의 의존성 slf4j-log4j12를 설치해야 합니다.
  • 또한 2015년 말 이후로는 더 이상 업데이트를 하지 않는다고 합니다.

Logback

  • Log4j보다 다양한 필터링 기능과 성능이 향상되었습니다.
  • SLF4J를 기본으로 지원하여 언제든 다른 로깅 프레임워크로 변경이 가능하게 합니다.
  • Spring boot에서 기본적으로 사용하는 로깅 프레임워크 입니다.
  • Auto Reload 기능이 포함되어 실행중인 애플리케이션의 log level을 변경 시 자동으로 반영되도록 합니다.

Log4j2

  • 기본적으로 Logback이 지원하는 모든 기능을 지원합니다. (다양한 필터링, Auto Reload 등)
  • SLF4J를 기본으로 제공합니다.
  • 비동기 로거를 제공하여 동기방식이었던 Log4j, Logback보다 약 10배 빠르고 대기시간도 줄어들었습니다.
  • Garbage Collector의 사용빈도를 줄여서 응답 속도를 향상시켰습니다.

각각의 특징들을 비교 후 Log4j는 더 이상 지원하지 않는 부분과 나머지 두 개의 로깅 프레임워크보다는 성능 상 떨어진다고 판단하여 제외시켰습니다.

그렇다면 둘 중 어떤 것을 선택해야 할까요? 정답은 없지만 제가 집중했던 부분은 성능이었습니다. 아무래도 대용량의 트래픽을 처리하는 서비스를 생각하고 있으므로 실제 서비스 로직 이외의 부분들은 최소한의 부담을 주기 위함입니다. Logback과 Log4j2를 성능면에서 좀 더 자세히 살펴보도록 하겠습니다.

우선 로깅 프레임워크의 성능을 평가하기 위해 몇 가지 용어들을 이해할 필요가 있습니다.

  • 응답 시간 : 메시지를 기록하는데 걸리는 총 시간 (서비스 시간 + 대기 시간)
  • 서비스 시간 : 메시지를 기록하기 위해 걸리는 시간
  • 대기 시간 : 서비스를 시작하기 전 요청이 대기열에서 대기중인 시간

보통은 서비스 시간이 오래걸린다고 생각하지만 작업량이 증가할 수록 대기 시간이 서비스 시간보다 배 이상 증가하는 경우가 더 많다고 합니다.

[그림 1] 응답시간 vs 서비스 시간

[그림1] 처럼 작업량의 증가에 따라 서비스 시간보다 대기시간이 더 많이 걸릴 수 있습니다.

그럼 각각의 성능비교를 해보겠습니다.

[그림 2] 비동기 일때 처리량 비교

[그림 2]에서 확인하는 것 처럼 스레드의 수가 증가할 수록 Log4j2가 성능이 Logback보다 월등한 것을 확인할 수 있습니다.

[그림 3] 동기방식일때 지연시간 비교

또한 동기식을 비교해 보아도 Logback보다 Log4j2가 지연시간이 훨씬 짧은 것을 확인할 수 있습니다.

결론

3개의 로깅 프레임워크의 성능을 비교한 결과 Log4j2가 동기, 비동기 일때 성능이 가장 좋은 것으로 확인 하였습니다. 또한 파사드 패턴을 이용한 SLF4J를 사용하기 때문에 언제든지 로깅 프레임워크를 변경할 수 있다는 부분에 부담없이 Log4j2를 사용하기로 결정하였습니다.

Reference

https://ehdvudee.tistory.com/9#footnote_9_3
https://logging.apache.org/log4j/2.x/performance.html
https://www.baeldung.com/spring-boot-logging
https://beyondj2ee.wordpress.com/2012/11/09/logback-사용해야-하는-이유-reasons-to-prefer-logback-over-log4j/

댓글