Python logging을 활용해 Flask에서 logging하는 방법

Flask Logging 하는 방법

python logging 모듈을 사용하여 로그를 남겨봅시다.

  • logging 모듈은 python에서 기본으로 제공하는 library입니다. 따라서 pip로 따로 설치할 필요가 없습니다.

  • 가장 기본적인 방식은 아래와 같습니다.

from flask import Flask
import logging
 
logging.basicConfig(filename = "logs/project.log", level = logging.DEBUG)
application=Flask(__name__)
 
@application.route("/")
def hello():
	return "hello"
  

if __name__=="__main__":
    application.run(host="0.0.0.0", debug=True) 


  • basicConfig 안에 filename은 로그파일을 저장할 경로입니다.

  • level은 CRITICAL, ERROR, WARNING, INFO, DEBUG 가 있습니다. 

  • CRITICAL로 지정하면 CRITICAL한 상황일 때만 로그로 기록됩니다.

  • WARNING로 지정하면 CRITICAL, ERROR, WARNING한 상황일 때만 로그로 기록됩니다.

  • 위 처럼 설정했을 때 아래와 같이 로그가 남게됩니다.

INFO:werkzeug:127.0.0.1 - - [14/Feb/2019 14:40:42] ”POST /{project}/api/v1.0/test HTTP/1.1” 200 -

INFO:werkzeug: * Detected change in ’/{project_path}/app.py’, reloading

INFO:werkzeug: * Restarting with stat

WARNING:werkzeug: * Debugger is active!

  • 위 로그는 내가 원하는 정보가 아닐 수 있습니다. 로그를 남길때 원하는 정보만 남기고 싶다면 커스텀하면 됩니다.
import logging
import datetime
from pytz import timezone

logging.basicConfig(filename = "logs/test.log", level = logging.DEBUG)

def log(request, message):
    log_date = get_log_date()
    log_message = "{0}/{1}/{2}".format(log_date, str(request), message)
    logging.info(log_message)
def error_log(request, error_code, error_message):
    log_date = get_log_date()
    log_message = "{0}/{1}/{2}/{3}".format(log_date, str(request), error_code, error_message)
    logging.info(log_message)

def get_log_date():
    dt = datetime.datetime.now(timezone("Asia/Seoul"))
    log_date = dt.strftime("%Y%m%d_%H:%M:%S")
    return log_date


  • 위에서 커스텀한 로그를 사용하면 됩니다.
from flask import Flask
import log


logging.basicConfig(filename = "logs/test.log", level = logging.DEBUG)
application=Flask(__name__)


@application.route("/")
def hello():
	log.log(request, "hello route")
	return "hello"
  

if __name__=="__main__":
    application.run(host="0.0.0.0", debug=True) 
  • 실행을 하면 아래와 같이 원하는 정보를 남길 수 있습니다.

INFO:werkzeug: * Restarting with stat

WARNING:werkzeug: * Debugger is active!

INFO:werkzeug: * Debugger PIN: 137-884-933

INFO:root:20190218_16:08:42/<Request ’http://localhost:5000/project/api/v1.0/test‘ [POST]>/

INFO:root:20190218_16:08:51/<Request ’http://localhost:5000/projectct/api/v1.0/test‘ [POST]>/500/(17, ’File exists’) ` INFO:werkzeug:127.0.0.1 - - [18/Feb/2019 16:08:51] ”POST /project/api/v1.0/test HTTP/1.1” 500 -

INFO:werkzeug: * Detected change in ’/Users/ns/project/project_ml/project.py’, reloading`

댓글남기기