카테고리 없음

Java Logging Framework! About slf4j, log4j, logback, log4j2

Jordy-torvalds 2021. 10. 22. 11:51
반응형

slf4j 와 log4j, logback, log4j2

slf4j는 퍼샤드 패턴으로 서로 각기 다른 로깅 프레임워크에 대해 동일한 인터페이스를 제공해주는 역할을 하는 라이브러리입니다.

그래서 실제 세부적인 내부 처리는 log4j, logback, log4j2 모두 다르지만, 라이브러리 사용자 관점에서는 slf4j를 통해 사용시 거의 동일합니다.

Apache에 따르면 멀티 스레드 환경에서의 비동기 로거(Async Logger)의 경우 log4j 1.x 및 logback보다 몇 배나 되는 처리량을 보인다고 합니다. 그리고 람다 표현식과 사용자 정의 로그 레벨도 지원합니다.

LOGBACK VS LOG4J2 VS JUL

위 표에 따르면, 비동기/동기 로깅의 처리 속도는 로그백이 다른 로깅 프레임워크에 비해 빠르다는 것을 알 수 있습니다.

다만, 비동기 로깅의 경우 로그백은 35% 정도로 많은 유실이 발생한 발면 log4j2는 유실이 발생하지 않을 뿐더러 비동기 로깅 쓰레드가 늘어갈수록 성능 차이가 발생합니다.

동기 로깅만 할려면 logback을 선택하는 것이 괜찮을 수도 있겠으나, 비동기 로깅에 대규모 멀티 쓰레드를 고려하고 있으면 log4j2가 더 나은 선택입니다. 덧붙여 동기 로깅의 성능 차이도 logback에 비해 크지 않습니다.

그렇다면 스프링 부트는 기본 로깅 프레임워크로 log4j2를 선택하는 것이 더 나은 것 같은데 왜 logback을 현재까지도 선택하고 있을까요?

왜 스프링 부트의 기본 로깅 프레임워크는 log4j2 가 아닌 logback인가?

그 이유는 한 한국인 개발자가 제기한 이슈에 대한 필 웹이란 개발자의 답변을 통해 확인할 수 있습니다.

일단 로깅 자체의 성능 차이가 좋은 것은 필 웹 또한 인정한다고 합니다.

하지만, 로깅 성능이 기본 로깅 프레임워크를 변경하는 이유가 될 수 없으며, 변경시 이전 버전의 개발자들의 버전 업시 많은 변경을 초래하게 되게 됩니다.

덧붙여, 만약에 스프링 부트가 현재 시점에 최초로 출시되었으면 필 웹log4j2를 채택했을 것이라고 답변했습니다.

Spring Boot에서 logback 대신 log4j2 를 사용하는 방법

아래 링크를 참고하여 교체합시다!

https://www.baeldung.com/spring-boot-logging

레퍼런스

반응형