로그 레벨 설정하기
로그 레벨이란?
- 로그의 중요도를 나타내는 수준
- 로깅 시스템에 사용되며 경우에 따라서는 해당 메시지를 저장할 것이지 말 것인지, 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