[Java] 자바 로깅(Logging) - log4j, log4j2, slf4j, logback
로깅(Logging)
로깅(Logging)은 애플리케이션의 동작에 대한 정보인 로그(Log)를 기록하는 행위를 말한다.
로그는 컴퓨터의 처리 내용이나 이용 상황을 기록하는 것으로 실행 중인 소프트웨어의 동작 상태를 파악하고 문제가 발생했을 때 원인 파악에 도움을 준다.
따라서 웹 또는 앱 애플리케이션 개발에도 문제를 해결하기 위해 로그를 남겨야 한다.
로그의 장점
- 로그 레벨(Log level)을 지정할 수 있다.
- 애플리케이션의 동작 흐름을 파악할 수 있다.
- 예외 발생 시 해당 정보를 쉽게 파악할 수 있다.
자바에서는 로그를 남기기 위한 여러 가지 로깅 프레임워크를 제공한다. 대표적으로 log4j, log4j2, logback 등이 있다.
slf4j
slf4j(Simple Logging Facade for Java)는 log4j, log4j2, logback 등 로깅 프레임워크에 대한 추상화 역할을 하는 라이브러리이다. logback과 log4j2와 같은 로깅 프레임워크의 인터페이스 역할을 한다.
log4j
log4j는 앞서 나열한 log4j2, slfj4, logback 보다 먼저 등장한 가장 오래된 로깅 프레임워크다.
현재 개발이 중단된 상태로 일반적으로 사용되지 않는다. 하지만, 이후 등장한 로깅 프레임워크들은 log4j를 개선한 형태로 사용된다.
log4j의 구성
- Logger : 로그 기능을 구현하는 객체로 개발자가 지정한 로그 레벨과 메시지를 Appender에게 전달한다.
- Appender : 로그의 출력 위치(Console, File, DB 등)를 결정한다.
- Layout : 로그를 어떤 형식으로 출력할 것인지를 결정한다.
로깅 레벨(Logging level)
FATAL: 아주 심각한 에러가 발생한 상태로 애플리케이션이 작동이 불가능한 경우이다. 일반적으로 사용하지는 않는다.- ERROR : 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. 예상치 못하거나 의도하지 않은 문제가 발생했을 경우 빠르게 원인 파악이 가능하다.
- WARN : 애플리케이션의 동작에는 문제가 없지만 향후 문제를 일으킬 수 있는 원인이 될 수 있는 경고성 메시지이다.
- INFO : 애플리케이션의 동작에 대한 정보를 나타내는 메시지로 명확한 의도가 있는 로그는 모두 INFO 레벨에 해당한다. 의도된 예외 처리 또한 INFO 레벨에 해당한다.
- DEBUG : 개발 시 디버그 용도로 사용하는 메시지를 나타낸다. 주로 개발 도중에 확인을 위해 필요한 로그들이 이에 해당한다.
TRACE: DEBUG 레벨보다 상세한 정보를 나타내는 메시지이다.
logback
logback은 log4j의 성능을 개선하고 slf4j를 기본적으로 지원하는 등 log4j의 동일한 개념을 사용하면서 향상된 프레임워크로 널리 사용되고 있다.
스프링 부트 사용 시 기본적으로 포함되어 있어서 추가적으로 의존성을 추가하지 않고도 사용할 수 있다.
logback의 핵심 모듈
logback-core : 로깅 프레임워크의 핵심 기능을 제공한다.
logback-classic : logback-core에 더 많은 기능을 추가한다.
logback-access : HTTP 액세스 로그를 작성하는 데 사용할 수 있도록 서블릿 컨테이너와 통합한다.
log4j2
log4j2는 가장 최근에 등장한 프레임워크로 logback보다 뛰어는 성능을 가진 프레임워크다. log4j2 또한 slf4j를 기본적으로 지원하며, 람다식도 지원한다.