본문 바로가기
Develop

로그 레벨 설정하기

by 은세라 2023. 8. 17.

로그 레벨이란?

  • 로그의 중요도를 나타내는 수준
  • 로깅 시스템에 사용되며 경우에 따라서는 해당 메시지를 저장할 것이지 말 것인지, alert을 보낼 건지 아닌지 등의 지표로 쓰이기도 함

로그 레벨 종류

기본적으로는 ALL, OFF 포함 7단계이다. (ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF)

보통 아래 5단계 정도를 많이 사용한다.

종종 print문으로 로그를 출력하는 경우도 있는데, 시스템 성능에도 악영향을 미칠 뿐 아니라 로그 레벨과 같은 체계적인 디버깅이 불가하니 최대한 피해야한다.

 

DEBUG
  • 디버깅 목적으로 사용되며, 개발 단계에서 상세한 정보를 기록한다.
  • 애플리케이션의 내부 동작을 이해하고 문제를 분석하는 데 도움을 준다.
INFO
  • 정보성 메시지를 기록한다.
  • 애플리케이션의 주요 이벤트나 실행 상태에 대한 정보를 전달한다. 
WARN
  • 경고성 메시지를 기록한다.
  • 예상치 못한 문제나 잠재적인 오류 상황을 알리는 메시지이다.
  • 애플리케이션이 정상적으로 동작하지만 주의가 필요한 상황을 알려준다.
ERROR
  • 오류 메시지를 기록한다.
  • 심각한 문제 또는 예외 상황을 나타내며, 애플리케이션의 정상적인 동작에 영향을 미칠 수 있는 문제를 알린다.
FATAL
  • 가장 심각한 오류 메시지를 기록한다.
  • 애플리케이션의 동작을 중단시킬 수 있는 치명적인 오류를 나타낸다.
  • 일반적으로 이러한 오류는 복구가 불가능하거나 매우 어려운 상황을 의미한다.

이 외에도 Emergency, Critical, Notice, Ok 등등 여러 로그 레벨이 사용된다.

적절한 로그 출력이란

1. 비즈니스 오류를 빠르게 파악할 수 있다

로그의 목적은 시스템의 상태를 확인하고 문제 해결을 위함이다.

즉, 케이스를 잘 나누어서 로그를 출력해야 문제를 빠르게 파악할 수 있다.

 

보통 운영 서버에서는 DEBUG 레벨의 로그는 출력하지 않는다.

따라서 운영 환경에서 오류가 발생했을 때, 빠르게 케이스를 확인하고 개발환경에서 재현 가능한 input 데이터를 확인해야한다.

어떤 문제가 발생했는지와 더불어 input 파라미터를 함께 출력하는 것이 확인에 용이하다.

2. 서버 오류를 빠르게 파악할 수 있다

비즈니스 오류가 로직상의 오류라면, 서버 오류는 인프라 혹은 네트워크 상의 문제로 발생하는 오류이다.

(혹은 개발자가 미처 예외처리 하지 못한 예외 케이스일 수 있다.)

이 경우 안정적인 운영을 위해서라면 최대한 빠르게 조치해야한다.

 

운영 모니터링 시, 서버 오류는 반드시 조치되어야 하는 오류이므로 한눈에 파악할 수 있어야 한다.

개발자의 처리 여부에 따라, 당장 조치가 필요하면 ERROR 그렇지 않고 비즈니스적 예외 케이스라면 WARN으로 로그 레벨을 정하여

명확한 모니터링이 가능하다.

(위 케이스는 Response Status Code를 바탕으로 구분할 수도 있고.. 이건 서비스의 특성마다 다를 듯)

3. 비용 효율적으로 로그를 저장한다

하나의 레벨로 로그 레벨을 정하면 그보다 하위의 레벨의 로그는 출력되지 않는다.

예를 들면, 개발 서버에서는 DEBUG 레벨로 출력하고 운영 서버에서는 INFO 레벨로 출력하는 경우이다.

 

운영 서버에서는 내부 동작에 대한 내용은 출력할 필요가 없거니와,

무분별하게 많은 로그를 찍으면 정작 중요한 WARN 이나 ERROR 레벨의 로그를 놓칠 수 있다.

로깅 시스템 종류

언어별로 각자의 로깅 시스템이 존재한다.

java : LOG4J

https://www.tutorialspoint.com/log4j/index.htm

 

log4j Tutorial

log4j Tutorial - log4j is a reliable, fast and flexible logging framework (APIs) written in Java, which is distributed under the Apache Software License. log4j is a popular logging package written in Java. log4j has been ported to the C, C++, C#, Perl, Pyt

www.tutorialspoint.com

python : logging 모듈
logger.debug('my DEBUG log')
logger.info('my INFO log')
logger.warning('my WARNING log')
logger.error('my ERROR log')
logger.critical('my CRITICAL log')

https://docs.python.org/ko/3/howto/logging.html

 

Logging HOWTO

Author, Vinay Sajip <vinay_sajip at red-dove dot com>,. Basic Logging Tutorial: Logging is a means of tracking events that happen when some software runs. The software’s developer adds logging call...

docs.python.org


참고문서

https://velog.io/@jeongpar/Python-Logging-%EC%82%AC%EC%9A%A9%EB%B2%95

https://sharonprogress.tistory.com/198

'Develop' 카테고리의 다른 글

웹 개발 구조 정리  (0) 2023.09.08
[Python] Fastapi 구조  (0) 2023.09.01

댓글