로그(log)는 소프트웨어의 이벤트를 기록하는 것으로써, 소프트웨어의 동작상태를 파악하고 문제가 발생했을 때 이 동작 파악을 통해서 소프트웨어의 문제를 찾아내고 해결하기 위해 디자인 되었다. 즉, 소프트웨어의 디버깅이나 모니터링을 위하여 정보를 기록하는 곳에 사용되는데 기존의 Debugger나 println에 비해 로그는 다음과 같은 장점이 있다
- 상활별 Level을 지정하여 Level별 메세지를 선택가능
- 응용 프로그램의 실행에 대한 흐름과 에러 확인 가능
- 프레임워크를 이용하여 간단하고 쉬운 사용환경 조성 가능
- 모듈 별로 유연하게 메세지 출력 가능
- 자유로운 출력 위치 및 다양한 출력 형식 지원
Java에서는 이러한 로그에 대해 여러 프레임워크가 존재한다. 로깅 프레임워크에는 slf4j, log4j,l logback, log4j2등 과 같은 것들이 존재하고 이것들에 대해 알아보았다.
slf4j란
slf4j는 Simple Logging Facade For Java의 약자로써 자체적인 로킹 프레임워크가 아니고 logger 추상체로써 다른 로깅 프레임워크가 접근할 수 있도록 도와주는 추상화 계층이다. 즉, logback이나 log4j2와 같은 로킹 프레임워크의 인터페이스의 역할을 해준다. 따라서 slf4j2를 이용하면 코드를 일정하게 유지하면서 구현체의 전환을 통해 다른 로깅 프레임워크로의 전환을 쉽고 간단하게 할 수 있다.
log4j란
log4j는 가장 오래된 로깅 프레임워크로써 Apache의 Java기반 로깅 프레임 워크이다. 콘솔 및 파일 출력의 형태로 로깅을 도와주며 xml, properties로 환경을 구성할 수 있다. 현재는 2015년 기준으로 개발이 중단되었다. log4j는 다음과 같은 구성을 가지고 있다.
log4j의 구성
요소 | 설명 |
Logger | 출력할 메시지를 Appender에게 전달 |
Appender | 전달된 로그를 어디에 출력할 것인지 결정(Console, File, JDBC 등) |
Layout | 로그를 어떤 형식으로 출력할 것인지 결정 |
log4j의 로그 레벨
로그 레벨 | 설명 |
FATAL | 아주 심각한 에러가 발생한 상태 |
ERROR | 요청을 처리하는 중 문제가 발생한 상태 |
WARN | 실행에는 문제가 없지만 향후 에러의 원인이 될 수있는 경고성 메세지 |
INFO | 상태변경과 같은 정보성 메세지 |
DEBUG | 개발시 디버그 용도로 사용하는 메세지 |
TRACE | 디버그 레벨 보다 상세한 이벤트를 나타내는 메시지 |
FATAL > ERROR > WARN > INFO > DEBUG > TRANCE
logback이란
logback이란 log4j 이후에 출시된 보다 향상되고 가장 널리 사용되고 있는 Java 로깅 프레임워크중 하나이다. slf4j의 구현체로써 동작하는 logback은 Springboot 환경의 경우는 spring-boot-starter-web안에 spring-boot-starter-logging의 logback이 기본적으로 포함되어 있어서 별다른 dependency 추가 없이 사용할 수 있다.
logback은 log4j에 비해 향상된 필터링 정책 및 기능(ex. 로그인 한 경우 logging 등등)과 로그 레벨 변경등에 대해 서버 재시작 없는 자동 리로딩을 지원해준다.
참고링크 : log4j와 logback 비교
log4j2란
가장 최신에 나온 로깅 프레임워크로써 Apache의 log4j의 다음 버전이다. logback처럼 필터링 기능과 자동 리로딩을 지원한다. logback과의 가장 큰 차이는 Multi Thread 환경에서 비동기 로거(Async Logger)의 경우 다른 로깅 프레임워크보다 처리량이 훨씬 많고, 대기 시간이 훨씬 짧다. 또한, Java8부터 도입된 람다식을 지원하고, Lazy Evalutaion을 지원한다.
참고링크 : log4j와 log4j2 비교
출처
logging.apache.org/log4j/2.x/performance.html
www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:logging:log4j_2:%EC%84%A4%EC%A0%95_%ED%8C%8C%EC%9D%BC%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94_%EB%B0%A9%EB%B2%95
jeong-pro.tistory.com/154
bcho.tistory.com/1312
www.slf4j.org/manual.html
'Java&Web' 카테고리의 다른 글
[Maven] Maven Profile을 이용한 Springboot 배포서버 별 환경 구성하기 (0) | 2020.12.29 |
---|---|
[Logging] Springboot에 Log4j2 설정하기 (0) | 2020.12.29 |
[Apache] Apache와 Springboot 연동하기(mod_jk) (0) | 2020.12.24 |
[JUnit] JUnit이란 (0) | 2020.12.18 |
[Apache] Apache와 Tomcat 연동하기 (0) | 2020.12.17 |