
Logback은 로깅(logging)을 관리하기 위한 라이브러리로, 자바(Java)와 코틀린(Kotlin)에서 주로 사용됩니다.
등장 시점으로 보자면 Log4j -> Logback -> Log4j2 순서로 등장하였습니다.
참고로 Ceki Gülcü 라는 분이 Log4j, Logback 오픈소스에 모두 기여하였습니다.
Logback은 Log4j에 비해 더 나은 성능을 제공합니다. 그 이유는 여러 가지 내부 최적화 때문인데, 가장 큰 차이는 비동기 로깅 처리와 더 효율적인 메모리 관리입니다. Logback은 성능을 위해 기본적으로 최적화된 방식으로 설계되었습니다.
다음 내용에서 자세히 알아보겠습니다.
Log4j는 자바에서 가장 많이 사용되던 로깅 프레임워크 중 하나였습니다. 하지만 시간이 지나면서 몇 가지 한계가 나타났습니다.
자세한 내용은 Log4j 의 한계 포스팅을 참조해주세요.
Logback은 비동기 로깅을 기본적으로 지원하여, 로그를 기록하는 동안 다른 코드 실행에 지장을 주지 않도록 처리할 수 있습니다. 즉, 로그가 기록되는 동안 메인 스레드가 대기하지 않도록 처리하여 성능을 향상시킵니다.
Logback에서 비동기 로깅은 AsyncAppender를 사용하여 쉽게 구현할 수 있습니다. 이는 성능을 극대화하는 방법 중 하나입니다.
아래와 같이 AsyncAppender 를 사용하여 비동기 로깅을 활성화할 수 있습니다.
<configuration>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="console"/>
</appender>
<root level="debug">
<appender-ref ref="ASYNC"/>
</root>
</configuration>
Logback이 메모리 관리와 가비지 컬렉션(GC) 최적화에서 Log4j보다 더 우수한 성능을 보입니다.
그 이유는 간단히 얘기해서 불필요한 객체 생성을 줄여서인데요. 방식은 다음과 같습니다.