로깅이 필요한 이유
소프트웨어를 개발하고 실행하다 보면, 정상적인 동작을 방해하는 오류나 예외가 언제든 발생할 수 있습니다. 로깅(Logging)은 소프트웨어가 실행되는 동안 일어나는 다양한 이벤트를 기록하고 추적할 수 있게 해주는 기능으로, 특히 개발 과정의 디버깅과 테스트 단계에서 큰 힘을 발휘합니다.
만약 로깅 기능 없이 프로그램이 갑자기 중단된다면 문제의 원인을 파악하기가 매우 어렵습니다. 규모가 작은 프로그램이라면 코드를 직접 살펴보며 원인을 찾을 수 있지만, 실무에서 다루는 복잡한 프로그램에서는 수작업으로 문제를 찾아내는 것이 거의 불가능에 가깝고, 설령 가능하더라도 상당한 시간이 소요됩니다.
다행히 파이썬에는 이러한 문제를 해결해 주는 logging 모듈이 기본으로 내장되어 있습니다. 로깅은 프로그램의 실행 흐름을 더 깊이 이해하도록 돕고, 개발 과정에서 미처 생각하지 못했던 문제나 상황을 미리 알려주는 매우 유용한 도구입니다.
logging 모듈 기본 사용법
파이썬은 logging 모듈을 표준 라이브러리로 제공하므로, 아래와 같이 import만 하면 바로 사용할 수 있습니다.
import logging
logging 모듈을 사용하면 상태 메시지를 파일이나 다른 출력 스트림에 기록할 수 있습니다. 로그 파일에는 코드의 어느 부분이 실행되었는지, 어떤 문제가 발생했는지 등의 추가 정보도 함께 담길 수 있습니다.
logging 모듈에서는 'logger'를 통해 원하는 메시지를 기록할 수 있으며, 이벤트의 심각도(severity)를 나타내는 5단계 로그 레벨이 기본적으로 제공됩니다.
로그 레벨 5단계 (심각도가 낮은 순서)
DEBUG – 문제를 진단할 때 필요한 세부 정보를 기록할 때 사용합니다.
INFO – 프로그램이 예상대로 정상적으로 작동하고 있음을 확인할 때 사용합니다.
WARNING – 이름 그대로, 향후 문제를 일으킬 가능성이 있는 잠재적 이슈를 알릴 때 사용합니다.
ERROR – 응용 프로그램이나 소프트웨어가 특정 기능을 수행하지 못했다는 오류 메시지를 기록할 때 사용합니다.
CRITICAL – 프로그램이 더 이상 실행을 지속하지 못할 수 있는 심각한 문제를 알릴 때 사용합니다.
logging 모듈은 기본 로거(default logger)를 제공하기 때문에, 별도의 복잡한 설정 없이도 곧바로 로깅을 시작할 수 있다는 장점이 있습니다.
예제
import logging
logging.debug('디버그 메시지입니다')
logging.info('정보 메시지입니다')
logging.warning('경고 메시지입니다')
logging.error('오류 메시지입니다')
logging.critical('치명적 오류 메시지입니다')실행 결과
WARNING:root:경고 메시지입니다 ERROR:root:오류 메시지입니다 CRITICAL:root:치명적 오류 메시지입니다
참고: debug()와 info() 메시지는 출력되지 않았습니다. 기본 설정에서 로거는 WARNING 수준 이상의 심각도를 가진 메시지만 처리하기 때문입니다. 따라서 모든 심각도의 로그 메시지를 확인하려면 로거의 레벨을 직접 설정해야 합니다.
예를 들어 스크립트 시작 부분에 logging.basicConfig(level=logging.DEBUG)를 한 줄 추가하면, DEBUG 수준부터 CRITICAL까지 모든 로그 메시지를 출력할 수 있습니다.