[JAVA] LOG 단계에 대해서

Kevin·2024년 8월 31일
2

JAVA

목록 보기
13/17
post-thumbnail

서론

현재 스케쥴러를 이용해 외부 API 서버와 통신하는 기능을 개발 중에 있는데, 해당 스케쥴러가 서버에서 정상적으로 돌고 있는지를 확인하기 위해 Log를 찍었었다.

그러나 작성했던 로그들은 로그에 검출되지 않았고, 나는 현재 구현 중인 코드에 이상이 있다고 생각했다.

그러나 프로젝트에 설정된 출력 로그 레벨에 비해 내가 작성했던 로그 레벨이 낮아 출력이 되지 않았던 것이고, 이 기회를 통해서 로그 레벨은 무엇인지에 대해서 공부해보고자 한다.

아래는 내가 작성했던 코드이다.

public class ModmProcService {
	
	private final static Logger logger = Log.getLogger(ModmProcService.class);

	public void execute() {
		
		try{			
			logger.info("지금 스케쥴이 돌아가는 중입니다!" + LocalDateTime.now().toString());
							
		}catch(Exception e){
			logger.error(e.getMessage());
		}
	}

}

Log Level

로그 레벨은 로그 메시지의 중요도를 나타내는 수준을 의미한다.

로그 레벨은 로깅 시스템에서 사용되며, 로그 메시지의 중요도에 따라 해당 메시지를 기록할지 결정하는데 사용된다.

그렇다면 로그 메시지의 중요도, 즉 로그 레벨은 어떤 것들이 있을까?

아래는 slf4j 라이브러리 기준 코드이다.

  • slf4j란 java.util.logging, logback 및 log4j와 같은 다양한 로깅 프레임 워크에 대한 추상화(인터페이스) 역할을 하는 라이브러리이다.
  • 스프링 부트에서는 로그 라이브러리로 FSLF4J, Logback을 채택하고 있다.

1. Trace

    /**
     * Log a message at the TRACE level.
     *
     * @param msg the message string to be logged
     * @since 1.4
     */
    public void trace(String msg);
  • 의미: 매우 상세한 수준의 디버깅 정보를 기록한다.
  • 사용 용도: 애플리케이션 흐름에 대한 세밀한 추적을 위해 사용되며, 주로 매우 자세한 내부 동작을 파악해야 할 때 유용하다.
  • 예시: 메서드의 입출력 값, 루프 내부의 세부적인 상태 변화 등
  • 주로 사용 상황: 주로 애플리케이션의 세부 동작을 추적하는 개발 단계에서 사용되며, 배포된 애플리케이션에서는 거의 사용되지 않는다.

2. DEBUG

    /**
     * Log a message at the DEBUG level.
     *
     * @param msg the message string to be logged
     */
    public void debug(String msg);
  • 의미: 디버깅을 위한 중요한 정보를 기록한다.
  • 사용 용도: 개발자가 디버깅을 할 때 필요한 일반적인 정보를 담고, 애플리케이션의 내부 동작을 이해하는 데 도움을 준다.
  • 예시: 특정 변수의 값, 조건문에 따른 흐름 제어, 메서드 실행 등
  • 주로 사용 상황: 애플리케이션 테스트 및 디버깅 과정에서 자주 사용되며, 배포된 상태에서는 제한적으로 활성화된다.

3. INFO

    /**
     * Log a message at the INFO level.
     *
     * @param msg the message string to be logged
     */
    public void info(String msg);
  • 의미: 애플리케이션의 일반적인 상태 정보를 기록한다.
  • 사용 용도: 애플리케이션의 중요한 동작을 기록하는 데 사용되며, 일반적으로 애플리케이션의 정상적인 흐름을 확인하기 위한 정보들이다.
  • 예시: 애플리케이션이 시작되거나 종료될 때, 주요 구성 요소가 초기화될 때
  • 주로 사용 상황: 애플리케이션 운영 시에도 활성화되는 로깅 레벨로, 중요한 비즈니스 이벤트 또는 흐름을 기록할 때 사용된다.

4. WARN

    /**
     * Log a message at the WARN level.
     *
     * @param msg the message string to be logged
     */
    public void warn(String msg);
  • 의미: 경고 메시지를 기록한다. 애플리케이션이 비정상적으로 작동할 수 있는 상황이 발생했을 때 이를 알리는 역할을 한다.
  • 사용 용도: 심각한 문제로 이어지지 않지만, 잠재적인 오류나 문제를 기록한다. 시스템 동작에 즉각적인 문제는 없지만, 주의가 필요한 상황을 기록할 때 사용한다.
  • 예시: 디스크 공간 부족 경고, 의심스러운 데이터 처리 등
  • 주로 사용 상황: 경고 상황을 모니터링할 때 유용하며, 잠재적인 문제를 미리 인지할 수 있도록 합니다.

5. ERROR

    /**
     * Log a message at the ERROR level.
     *
     * @param msg the message string to be logged
     */
    public void error(String msg);
  • 의미: 심각한 오류가 발생했음을 기록한다.
  • 사용 용도: 시스템이나 애플리케이션이 비정상적으로 작동하는 상황을 알리며, 즉각적인 조치가 필요할 수 있다. 주로 실행 중 예외가 발생했을 때 기록된다.
  • 예시: NullPointerException, 데이터베이스 연결 실패, 필수 리소스 누락
  • 주로 사용 상황: 운영 환경에서 중요한 에러 상황을 기록하여 개발자나 운영팀이 빠르게 문제를 해결할 수 있도록 한다.
profile
Hello, World! \n

0개의 댓글