Web/Flask-python

[flask-python] Flask 서버 웹소켓, 웹페이지 요청 로그 비활성화 + logging

socketio = SocketIO(logger=False,engineio_logger=False)

웹소켓 - logger, engineio_logger 모두 False 로 변경시 웹소켓 로그 꺼짐

import logging
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)

app.run() 실행전에 log 변수에 대해 위와같이 설정하면 flask werkzeug wsgi 로그가 에러를 제외하고는 출력되지 않음.

logging옵션은 CRITICAL,ERROR,WARNING,INFO,DEBUG 등이 있다.

플라스크의 경우 기본수준은 WARNING으로 되어있고, werkzeug는 INFO 레벨로 되어있는듯.

CRITICAL ~ DEBUG 순서로 로그레벨이 정해지며, 하위레벨은 출력이 안된다.

즉, CRITICAL 로 세팅되어있으면 ERROR~DEBUG 는 안보인다는 이야기고, INFO로 세팅되어있으면 CRITICAL~INFO 까지 나오고 DEBUG 레벨은 안나온다.

웹서버 요청 로그는 INFO 레벨부터 나오고(Detected Change 와 같은 파이썬 코드 변경 로그도 INFO레벨), 웹서버 재시작 정보 등은 WARNING 레벨부터 나온다.

따라서 웹서버 요청로그를 보고싶지 않으면 WARNING 레벨정도로만 해놔도 된다.

사용자가 원하는 로그를 레벨별로 나누어서 볼수도 있다.

log.critical("critical")
log.warning("warning")
log.info("info")

이렇게 하면 위에서 설정한 로그레벨에 따라 보이는 내용이 달라진다.

logging.Formatter() 를 이용해 원하는 로그 포맷을 만드는것도 되는듯.

log = logging.getLogger('werkzeug')
formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s',datefmt='%Y-%m-%d:%H:%M:%S')
hdr = logging.StreamHandler()
hdr.setFormatter(formatter)

log.addHandler(hdr)
log.setLevel(logging.WARNING)

이경우에 로그 핸들러를 지정해줘야하는데, 로그가 IO 스트림으로 나갈건지, 혹은 파일 입출력으로 나갈것 인지 핸들러를 통해 지정한 다음, Formatter에 지정한 포맷을 handler.setFormatter() 함수를 통해 설정한다.

그 다음, 설정한 핸들러를 현재 로그 객체에 addHandler() 함수로 추가하면 지정한 포맷 형식으로 로그가 나온다.