안녕하세요. 

이번 글에서는 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."

(By Wikipedia)

 

 

1. Event란 무엇인가요?

컴퓨팅에서 event란 프로그램에 의해 감지되고 처리될 수 있는 동작이나 사건을 말합니다.  예를 들어, 마우스를 클릭 하거나 키보드를 입력하면 이벤트가 발생합니다.  마우스를 예로 들어 이벤트 기반 시스템이 수행되는 과정을 설명하면 아래와 같습니다.

  1. (마우스) 장치로부터 입력이나 내부 경보를 계속해서 기다립니다.
  2. 마우스 클릭 시, 이벤트 발생 시 정보들(ex: 언제, 어디서, 어떤 이벤트가 발생 했는지 등)을 이벤트 핸들러 (event handler)로 보냅니다.
  3. 그리고, 이벤트 핸들러 (event handler) 에서 발생 한 이벤트를 어떻게 처리해 줄 지 프로그래밍 해줍니다.

<그림1 출처. https://fromyou.tistory.com/546>

 

위 그림에서 마우스를 클릭하여 event를 발생시키면 event handler를 통해 사이트에 접속하는 과정이 실행됩니다.

 

이때, 접속한 시간을 따로 기록할 수 있도록 프로그래밍을 할 수 도 있습니다. 이렇게 접속한 시간을 따로 기록해두면 나중에 내가 한달에 몇 번 사이트에 접속했는지 알 수 있겠죠?  

 

 

 

2. Log란 무엇인가요?

앞서 설명한 "접속시간을 기록하는 행위""log"라고 합니다. 좀 더, 일반화 해서 말하자면 "무언가를 기록하는 행위"log라고 하지요.  (computer 분야에서는 log라는 것 자체를 동사 개념으로 사용하고 있는데, 보통 logging이라는 용어로 대체되어 사용되기도 합니다) 

 

<그림2 출처. https://en.dict.naver.com/#/entry/enko/36130c3cc2784ed8a58f61092fab6066>

 

그리고, 이렇게 "무언가를 기록하는 행위"를 한다는 것은 "기록에 대한 파일을 만드는 것"으로 볼 수 있는데, 이때 만들어진 파일을 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가지 단계를 거쳐야 합니다.

  1. logging.Formatter를 이용하여 원하는 logging message 출력형태를 결정해줍니다. 
  2. logging message를 출력하는 방법은 총 2가지 입니다. 첫 번째는 console 창에 logging message를 띄우는 방법이 있고, 두 번째는 특정 파일에 logging message를 보내 저장시키는 방법이 있습니다. 이때, console 창에 출력하고 싶다면 "logging.StreamHandler()"함수를, 특정 파일에 출력하고 싶다면 "logging.FileHandler()"함수를 이용하면 됩니다. 
  3. 앞서 설정한 logging message 형태와 출력방식을 "setFormatter(formatter)" 함수로 세팅해줍니다.
  4. 마지막으로 "addHandler"를 통해 logging 객체(=logger)에 추가시켜 줍니다.

 

 

 

 

참고로 logging.Formatter의 attribute에 대한 설명은 아래 사이트를 참고 하시는걸 추천합니다.

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

 

logging — 파이썬 로깅 시설 — Python 3.9.7 문서

logging — 파이썬 로깅 시설 소스 코드: Lib/logging/__init__.py 이 모듈은 응용 프로그램과 라이브러리를 위한 유연한 이벤트 로깅 시스템을 구현하는 함수와 클래스를 정의합니다. 표준 라이브러리

docs.python.org

<그림3 출처. https://docs.python.org/ko/3/library/logging.html>

 

 

logging에 대해 좀 더 알고 싶으시다면 아래 사이트를 참고하시는 걸 추천합니다!

https://greeksharifa.github.io/%ED%8C%8C%EC%9D%B4%EC%8D%AC/2019/12/13/logging/#21-%EC%B0%A8%EB%A1%80%EB%8C%80%EB%A1%9C-logging-%EC%A4%80%EB%B9%84%ED%95%98%EA%B8%B0

 

Python, Machine & Deep Learning

Python, Machine Learning & Deep Learning

greeksharifa.github.io

 

https://www.youtube.com/watch?v=zf7L1hCO1t4 

 

+ Recent posts