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!")
-
logging name setting —> 나의 로깅 모듈 세팅하기
logger = logging.getLogger("my_log")
-
logging level setting —> 나의 로깅 모듈의 레벨 설정하기
logger.setLevel(logging.INFO)
-
set handler —> 로깅 핸들러 설정하기
my_test_log_handler = logging.StreamHandler() my_test_log_handler.setLevel(logging.INFO) #옵션 my_test_log_handler.setFormatter(LOG_FORMATTER)
-
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()