9월 04, 2023

Java Logging Levels (log4j - 로그레벨) 총정리

 java debugging을 할 때 꼭 필요한 것이 log 이다. 

특히 운영 서비스에서 무엇인가 오류가 생겼을 때 필히 확인해야 하는 것이 로그라서 로그를 어느 레벨까지 찍을 것 인지에 대한 고민이 생긴다.


로그 레벨은 크게 7단계로 분류된다. 


1. ALL

2. DEBUG

3. INFO

4. WARN

5. ERROR

6. FATAL

7. OFF

1-> 7 로 갈수록 점점 높은 레벨의 로그 단계를 의미한다. 


즉, 

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF


이 레벨로 분류가 된다고 할 수 있다. 


흔히 우리가 logger.debug, logger.info 이런 식으로 사용하는데 로그 레벨의 차이라고 볼 수 있다. 


log의 경우 

org.apache.log4j library에서 import해서 사용하고 원하는 로그 레벨을 먼저 지정하면 그 상위 로그 레벨이 로그로 출력되는 구조이다. 


그래서 ALL 이 가장 낮은 log level이고 OFF가 가장 높은 log level이라고 할 수 있다. 

ALL로 log level을 세팅하면 ALL 위의 모든 로그가 출력되니 ALL, 

OFF로 log level을 세팅하면 OFF 위의 모든 로그가 출력되니 출력되는 것이 없어 OFF라고 생각하면 이해하기 편하다. 

import org.apache.log4j.*; public class LogClass { private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class); public static void main(String[] args) { log.setLevel(Level.INFO);// INFO 레벨 위에 있는 메세지를 로그로 출력 log.trace("Log Level 1: TRACE"); log.debug("Log Level 2: DEBUG");
log.info("Log Level 3: INFO"); log.warn("Log Level 4: WARN"); log.error("Log Level 5: ERROR"); log.fatal("Log Level 6: FATAL"); } }

결과값은 어떻게 될까!


log.setLevel(Level.INFO)를 통해

INFO 레벨 위에 있는 (INFO 레벨 포함) 메세지를 로그로 출력하니 info, warn, error, fatal 단계가 출력될 것이다. 결과값은 아래와 같다.


Log Level 3: INFO Log Level 4: WARN Log Level 5: ERROR
Log Level 6: FATAL


적절한 로그 레벨을 설정하여 과도하게 로그가 쌓이지 않고 꼭 필요한 로그들을 적절히 볼 수 있도록 메세지를 적자.