Old Branch

python logging 파이썬 로깅 (feat. Flask)

woolbro 2020. 6. 1. 13:11
반응형

Logger

Logging Level

DEBUG - 상세한 정보
INFO - 일반적인 정보
WARNING - 예상치 못하거나 가까운 미래에 발생할 문제
ERROR - 에러 로그. 심각한 문제
CRITICAL - 프로그램 자체가 실행되지 않을 수 있음

DEBUG < INFO < WARNING < ERROR < CRITICAL 순서로 로깅

  • 파이썬 로거 레벨 설정에 따라서 하위 레벨은 출력이 안된다.
  • 기본 로거 레벨 세팅은 WARNING이기 때문에 설정 없이 INFO, DEBUG를 출력 할 수 없다.

 

Python logger

기본 로깅

  • 지금 서버가 시작되었습니다
  • 서버 포트는 000번 입니다
  • 함수가 호출되었습니다
  • 어떤 데이터가 들어왔어요

등의 로깅 이력을 남기는 것이 좋다.

#test_logger.py
import logging

if __name__ : '__main__':
        logging.info("hello world!!!")

위의 test_logger.py는 작성을 해서 실행을 하면, hello world가 출력되지 않는다.

로깅의 기본 세팅이 warning이기때문이다

#test_logger_edit.py
import logging

if __name__ : '__main__':
        logger = logging.getLogger()
        logger.setlevel(logging.DEBUG)
        logger.info("hello world!!")

이제 test_logger_edit.py를 실행 시키면 hello world가 출력된다

 


logging formatter

로깅을 할 때에 매번 같은 형식으로 출력하고 싶다면 formatter을 설정 해 주는 것도 방법이다.

LOG_FORMATTER = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d:%H:%M:%S')

logger.setLevel(logging.INFO)
logger.setFormatter(LOG_FORMATTER)

logger.info("hello world!")

setFormatter 를 사용하면, 형식을 바꿔서 출력이 가능하다.

우리가 써 준 "hello world!" 는 로거의 입장에서 message이다.


 

나의 로깅모듈

파이썬 기본 로깅 모듈 세팅을 사용 해도 좋지만, 원하는 로깅핸들러를 만들어 작동하게 하는 것도 좋다

#test_my_logger.py
import logging

LOG_FORMATTER = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d:%H:%M:%S')

logger = logging.getLogger("my_log")
logger.setLevel(logging.INFO)

my_test_log_handler = logging.StreamHandler()
my_test_log_handler.setLevel(logging.INFO)

my_test_log_handler.setFormatter(LOG_FORMATTER)

logger.addHandler(my_test_log_handler)
logger.info("hello my logger!")
  1. logging name setting —> 나의 로깅 모듈 세팅하기

     logger = logging.getLogger("my_log")
  2. logging level setting —> 나의 로깅 모듈의 레벨 설정하기

     logger.setLevel(logging.INFO)
  3. set handler —> 로깅 핸들러 설정하기

     my_test_log_handler = logging.StreamHandler()
     my_test_log_handler.setLevel(logging.INFO)
    
     #옵션
     my_test_log_handler.setFormatter(LOG_FORMATTER)
  4. add handler —> 설정한 핸들러 추가하기

     logger.addHandler(my_test_log_handler)


Flask logger

플라스크는 0.3 버전부터 logger를 플라스크 내부에서 제공하기 시작했다.

플라스크에서 기본적으로 제공하는 로깅 말고 일반 python logging을 사용 해도 무방하다.

from flask import Flask

app = Flask(__name__)

if __name__ == '__main__':

        app.logger.info("test")
        app.logger.debug("debug test")
        app.logger.error("error test")
        app.run()