본문 바로가기

자바

Log4j, Logback, Log4j2 정리

 

로그(Log)란? 

소프트웨어 실행중 발생되는 행위와 상태 및 동작정보를 시간 경과에 따라 기록하는 데이터를 일컫는 말이다.

이러한 로그를 생성하는 과정을 "로깅(Logging)"이라 한다.

 

Java에서는 다양한 로깅 라이브러리를 지원을 하며, 각 로깅 라이브러리가 내부적으로 어떻게 동작하는지 모르면 성능 상 이슈를 발생시킬 수 있기에 상황에 맞게 라이브러리를 알고 사용하는것이 좋다.

 

로그를 사용하면 아래와 같은 장점을 가질 수 있다.

  • 상황별 LEVEL 지정을 통한 LEVEL 별 로깅 가능
  • 응용프로그램의 실행에 대한 흐름 및 에러 확인 가능
  • 모듈 별, 파열 별, 메소드 등 자유로운 출력 위치 및 다양한 출력 형식 지원
  • 프레임워크를 이용한 간단하고 쉬운 사용 환경 조성 가능

 

로깅 라이브러리의 종류

  • java.util.logging (jdk8)
  • Log4j, Log4j2
  • logback
  • SLF4j

 

java.util.logging

  • 자바에서 기본적으로 제공해주는 Log package
  • 별도의 외부라이브러리 없이도 파일, 콘솔에 로그를 출력할 수 있다
  • 다른 라이브러리에 비해 퍼포먼스가 좋지않고, 포맷팅이 유연하지 않아 사용되지 않고있다.

 

Log4j

  • log4j 아파치 재단에서 처음으로 개발한 자바 기반 로깅 유틸입니다.
  • 2015년 기준으로 개발이 중단되었으며 보완된 Log4j2가 나오면서 기존의 시스템이 아닌 이상 사용의 이유가 줄어들었다.

로그 레벨

FATAL 매우 심각한 에러가 발생된 상태
ERROR 요청 처리 도중 에러가 발생된 상태
WARN 실행에는 문제가 없으니 에러가 발생 될 수 있는 경고성 메세지
INFO 상태 변경과 같은 정보를 제공하는 메세지
DEBUG 개발시 디버그 용도로 사용되는 메세지
TRACE 디버그 보다 상세 이벤트를 나타내는 메세지

 

 

Logback

  • logback은 log4j  이후 나왔으며 향상된 기능으로 가장 널리 사용되고있는 java 라이브러리 입니다.
  • slf4j의 구현체로써 SpringBoot의 기본 log로 사용되고 있으며 spring-boot-starter-web안에 spring-boot-starter-logging의 logback이 기본적으로 포함되어 있어서 별다른 dependency 추가 없이 사용할 수 있습니다.

 

 

Log4j2

  • Log4j2는 Log4j를 보안한 라이브러리로 Facade패턴으로 구현 다른 log라이브러리들과 사용될 수 있다.
  • Log4j 2의 가장 눈에 띄는 기능들 가운데 하나는 비동기 성능이며, 커널 락의 필요성을 줄이12배만 로깅 성능 제공합니다.
  • Log4j2 사용을 위해서는 spring-boot-starter-logging 모듈을 exclude하고 spring-boot-starter-logging-log4j2 의존성을 주입해야 합니다.
  • Logback과 달리 멀티 쓰레드 환경에서 비동기 로거(Async Logger)의 경우 Log4j 및 Logback보다 성능이 우수합니다.
  • 2021년 말, 최대 보안 이슈인 Apache Log4j2의 보안 취약점이 발견되었으며 글을 쓰는 현재는 최신 버전으로 업데이트 했을 경우 해당 문제를 해결할 수 있습니다.

 

SLF4J

  • SLF4J(Simple Logging Facade for Java)는 java.util.logging, logback 및 log4j2와 같은 다양한 로깅 프레임워크에 대한 추상화(인터페이스) 역할을 하는 라이브러입니다.
  • logger의 추상화 인터퍼페이스로 구현체만 바꾸어 사용이 가능하며 구현체로써는 logback, log4j2 등이 있습니다.

 

 

 

참고사이트

https://goddaehee.tistory.com/45

https://kurukurucoding.tistory.com/49

https://wildeveloperetrain.tistory.com/36

https://0soo.tistory.com/241

'자바' 카테고리의 다른 글

Spring Boot 2와 3은 무엇이 다를까?  (0) 2024.06.01
Java 8, 11, 17  (0) 2024.05.27
소프트웨어 배포 전략  (0) 2024.04.07