안녕하세요.
이번 글에서는 logging 모듈에 대해서 설명해보려고 합니다.
먼저, logging을 검색하면 아래와 같이 정의하고 있음을 알 수 있습니다.
"In computing, a log file is a file that records either events that occur in an operating system(or other software runs) or messages between different users of communication software. Logging is the act of keeping a log."
1. Event란 무엇인가요?
컴퓨팅에서 event란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 말합니다. 예를 들어, 마우스를 클릭 하거나 키보드를 입력하면 이벤트가 발생합니다. 마우스를 예로 들어 이벤트 기반 시스템이 수행되는 과정을 설명하면 아래와 같습니다.
- (마우스) 장치로부터 입력이나 내부 경보를 계속해서 기다립니다.
- 마우스 클릭 시, 이벤트 발생 시 정보들(ex: 언제, 어디서, 어떤 이벤트가 발생 했는지 등)을 이벤트 핸들러 (event handler)로 보냅니다.
- 그리고, 이벤트 핸들러 (event handler) 에서 발생 한 이벤트를 어떻게 처리해 줄 지 프로그래밍 해줍니다.
위 그림에서 마우스를 클릭하여 event를 발생시키면 event handler를 통해 사이트에 접속하는 과정이 실행됩니다.
이때, 접속한 시간을 따로 기록할 수 있도록 프로그래밍을 할 수 도 있습니다. 이렇게 접속한 시간을 따로 기록해두면 나중에 내가 한달에 몇 번 사이트에 접속했는지 알 수 있겠죠?
2. Log란 무엇인가요?
앞서 설명한 "접속시간을 기록하는 행위"를 "log"라고 합니다. 좀 더, 일반화 해서 말하자면 "무언가를 기록하는 행위"를 log라고 하지요. (computer 분야에서는 log라는 것 자체를 동사 개념으로 사용하고 있는데, 보통 logging이라는 용어로 대체되어 사용되기도 합니다)
그리고, 이렇게 "무언가를 기록하는 행위"를 한다는 것은 "기록에 대한 파일을 만드는 것"으로 볼 수 있는데, 이때 만들어진 파일을 log파일이라고 합니다. 접속시간에 대한 내용만 기록을 했다면 "접속시간 log 파일"이라고 부르죠.
마우스나 키보드와 같은 이벤트를 통해서만 log라는 행위를 하거나 (log)파일을 얻을 수 있는 건 아닙니다.
프로그램 명령어를 통해 log라는 행위를 할 수 도 있습니다
3.logging 모듈이란?
Python에서는 명령어를 통해 log를 할 수 있게 해줍니다.
즉, 특정 명령어를 이용하면 프로그램이 실행되는 동안 일어나는 모든 정보를 기록으로 남길 수 있죠.
기록된 정보들은 의미있는 분석을 위해 사용될 수 도 있습니다.
log를 이용하는 또 다른 목적은 개발 단계에서 프로그램이 제대로 동작하는지 확인하기 위함입니다.
프로그램이 제대로 동작하는지 확인하는 단계는 크게 5가지 단계로 나눌 수 있는데, 이것을 logging level이라고 합니다.
3.1. logging level
Level | Numeric value | 의미 |
DEBUG | 10 | 어떤 문제가 발생했을 경우 해당 문제를 진단하고 싶을 때 필요한 자세한 정보를 기록 |
INFO | 20 | 작업이 정상적으로 작동하고 있음을 메시지를 통해 확인하고 싶은 경우 |
WARNING | 30 | 소프트웨어가 동작하고 있지만, 예상치 못한 일이 발생했거나 가까운 미래에 문제가 발생할 수 도 있음을 경고 Ex1) 디스크 공간 부족 → 프로그램은 잘 동작되지만 앞으로 문제가 발생할 수 도 있음 |
ERROR | 40 | 문제가 발생했으며 소프트웨어 일부가 기능을 수행하지 못했다는 뜻 |
CRITICAL | 50 | 심각한 에러 → 프로그램 자체가 실행되지 않을 수 있다는 것을 뜻함 |
DEBUG < INFO < WARN < ERROR < FATA
"setLevel"이라는 명령어를 이용하여 위와 같은 5단계의 logging level 중 하나를 설정해 줄 수 있습니다.
만약, WARN을 로그 레벨로 지정을 하게 되면 WARN보다 높은 level에 대한 logging message만 출력되는 것을 볼 수 있습니다.
3.2. logging.Formatter
logging.Formatter를 이용하면 추가적인 정보를 더해 logging message를 출력할 수 있습니다.
logging.Formatter를 이용하려면 4가지 단계를 거쳐야 합니다.
- logging.Formatter를 이용하여 원하는 logging message 출력형태를 결정해줍니다.
- logging message를 출력하는 방법은 총 2가지 입니다. 첫 번째는 console 창에 logging message를 띄우는 방법이 있고, 두 번째는 특정 파일에 logging message를 보내 저장시키는 방법이 있습니다. 이때, console 창에 출력하고 싶다면 "logging.StreamHandler()"함수를, 특정 파일에 출력하고 싶다면 "logging.FileHandler()"함수를 이용하면 됩니다.
- 앞서 설정한 logging message 형태와 출력방식을 "setFormatter(formatter)" 함수로 세팅해줍니다.
- 마지막으로 "addHandler"를 통해 logging 객체(=logger)에 추가시켜 줍니다.
참고로 logging.Formatter의 attribute에 대한 설명은 아래 사이트를 참고 하시는걸 추천합니다.
https://docs.python.org/ko/3/library/logging.html
logging에 대해 좀 더 알고 싶으시다면 아래 사이트를 참고하시는 걸 추천합니다!
https://www.youtube.com/watch?v=zf7L1hCO1t4