1. 로그(log), 로깅(logging)이란
개발 또는 운영중인 시스템의 상태, 작동 정보 등을 시간 경과에 따라 기록한 것을 로그(log)라고 하며,
로그를 생성하도록 시스템을 작성하는 활동을 로깅(loggin)이라고 한다.
로깅 활동으로 생성된 로그를 통해 시스템의 운영상태를 감시할 수 있으며, 발생하는 문제점을 추적하여 문제 해결에 이용할 수도 있다.
2. 로깅 라이브러리
가장 간단하게 로그를 출력할 수 있는 방법으로는 각 개발 언어에서 제공되는 콘솔 출력 함수나 메소드를 사용하는 것이다.
자바의 경우 System.out.println() 메소드를 사용하여 간편하게 출력할 수 있지만
로그의 양이나 수준을 조절할 수 없고, 파일로 저장하여 관리하기에도 불편하며 성능면에서도 낮은 편에 속한다.
그리고 개발자들을 위한 로깅 라이브러리는 이미 다양하게 개발되어 있어서 직접 로그 출력 기능을 개발하는 것보다는
라이브러리를 사용하여 콘솔에 로그를 출력하거나 파일로 저장하여 관리한다.
다음은 다양한 라이브러리 중 자바에서 자주 사용되는 라이브러리들의 간단한 설명이다.
- java.util.logging
- JDK 1.4부터 포함된 표준 로깅 API이다. 별도의 라이브러리를 추가할 필요가 없다.
하지만 기능이 많이 부족하여 다른 로그 라이브러리를 더 많이 사용한다. - Apache Commons logging
- 아파치 재단의 Commons 라이브러리 중 로그 출력을 제공하는 라이브러리다. - Log4j
- 아파치 재단에서 제공하며, 가장 많이 사용되는 라이브러리다. - Logback
- Log4j 개발자가 Log4j의 단점을 개선하고 기능을 추가하여 개발한 로깅 라이브러리다. - SLF4J
- 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법을 제공한다. 로그 라이브러리의 인터페이스
서버에 파일로 남겨진 로그들이 계속해서 쌓이게 될 경우 로그파일의 용량이 과도하게 커져서 시스템 작동에 문제가 발생할 수 있다.
그런 부분을 보완하기 위해 Log4j 에서는 appender라는 요소를 사용하여 로그를 관리할 수 있다.
appender의 클래스를 RollingFileAppender, DailyRollingFileAppender 로 사용하면
설정하는 방법에 따라 파일의 크기, 파일 갯수를 제한 한다던지 일 단위로 각각 다른 파일로 저장하고 특정 인덱스를 넘어간 파일들은 삭제되도록 변경하여 문제를 해결할 수 있다.
3. 로그 레벨 (Log Level)
프로그램을 개발, 운영할 때 어떤 로그를 어떤 방식으로 남길지 결정을 해야 한다.
개발하는 시점에는 조금 더 자세한 로그를 필요로 할 수도 있고,
실제 운영할 때에는 남기지 않아도 되는 로그까지 기록, 저장될 수 있기 때문이다.
이와 같이 로그는 목적성을 가져야 하기 때문에 로그의 레벨(Level)을 나누어 사용된다.
라이브러리마다 조금씩 다르지만 보통 5~6가지의 레벨로 나뉜다.
(아래로 갈수록 상위 로그 레벨)
1 | TRACE | 디버그 레벨보다 조금 더 상세한 내용을 나타낸다. |
2 | DEBUG | 개발 시 디버그 용도로 사용하는 메시지를 나타낸다. |
3 | INFO | 상태 변경과 같은 정보성 메시지를 나타낸다. |
4 | WARN | 프로그램의 실행에는 문제가 없지만, 나중에 시스템 에러의 원인이 될 수 있는 경고 메시지를 나타낸다. |
5 | ERROR | 요청을 처리하는 도중 문제가 발생한 상태를 나타낸다. |
6 | FATAL | 아주 심각한 에러가 발생한 상태, 시스템적으로 심각한 문제가 발생해서 어플리케이션 작동이 불가능할 경우를 나타낸다. |
시스템에서 설정한 값에 따라서 특정 레벨 이하의 로그는 출력하지 않게 설정할 수 있으며, 패키지별로도 각각 지정할 수 있다.
<logger name="org.springframework.core" level="info"/>
<logger name="org.springframework.web" level="error"/>
예를 들어 로그 레벨을 위와 같이 설정한 경우
org.springframework.core 패키지는 [info, warn, error, fatal] 레벨의 로그만 출력하고,
org.springframework.web 패키지는 [error, fatal] 레벨의 로그만 출력한다.
- 파이썬에서는 logging 이라는 자체 내장되어 있는 모듈을 사용하는데 자바의 로깅 레벨과 거의 같으며 FATAL레벨 대신 CRITICAL이라는 명칭을 사용하는것 같다
DEBUG > INFO > WARNNING > ERROR > CRITICAL
Example
LoggerFactory.APP_LOGGER.info("LOGIN FAIL.. 입력한 정보의 사용자가 존재하지 않습니다. ID: {}", loginId);
'개발괴발 > JAVA' 카테고리의 다른 글
Study #2 Checked/Unchecked Exception, Error (0) | 2022.03.22 |
---|