로그(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
'자바' 카테고리의 다른 글
Spring Boot 2와 3은 무엇이 다를까? (0) | 2024.06.01 |
---|---|
Java 8, 11, 17 (0) | 2024.05.27 |
소프트웨어 배포 전략 (0) | 2024.04.07 |