본문 바로가기
IT/파이썬

파이썬 동작 로그 파일 저장하기 - flask gunicorn logging

무슨 로그 파일 저장하는 것이 이렇게나 어렵노?

Flask + Gunicorn + Nginx 이렇게 궁합을 싸 놓으니, 어데 저장되는지 누가 주체인지도 모르겠고

어렵다.

 

그냥 내가 원할 때 저장하고 파일 위치도 쉽게 알 수 있으면 되는데.....

일단 아래 코드 적용해서 돌려보니 작업 디렉토리에 파일이 생기긴 하네.

잘 모르지만 일단 아래 코드로 적용

 

원본 코드 위치 - https://gist.github.com/andrisasuke/0d5958c076fcf44e6a15c9d99d9c8c86

 

flask logging gunicorn and file

flask logging gunicorn and file. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

# from https://gist.github.com/andrisasuke/0d5958c076fcf44e6a15c9d99d9c8c86

import logging
from logging import Formatter
from logging.handlers import RotatingFileHandler

logger = logging.getLogger(__name__)
file_handler = RotatingFileHandler('test.log', maxBytes=10000, backupCount=1)
handler = logging.StreamHandler()
file_handler.setFormatter(Formatter(
    '%(asctime)s %(levelname)s: %(message)s '
    '[in %(pathname)s:%(lineno)d]'
))
handler.setFormatter(Formatter(
    '%(asctime)s %(levelname)s: %(message)s '
    '[in %(pathname)s:%(lineno)d]'
))
logger.addHandler(file_handler)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

 

로그를 찍어보니 아래처럼 나오네

2021-07-27 14:22:08,710 INFO: {'requests': ...} [in iews.py:117]
2021-07-27 14:22:08,739 ERROR: ERR NotUniqueError : Tried to save duplicate ...'}) [in ews.py:205]

 

포맷에 들어가는 로그 내부 예약어를 알려면 아래 링크로 들어가서 보세요.

https://docs.python.org/2/library/logging.html#logrecord-attributes
 

15.7. logging — Logging facility for Python — Python 2.7.18 documentation

15.7. logging — Logging facility for Python Source code: Lib/logging/__init__.py This module defines functions and classes which implement a flexible event logging system for applications and libraries. The key benefit of having the logging API provided

docs.python.org

 

위에서 사용한 몇개만 가져오면,

asctime %(asctime)s Human-readable time when the LogRecord was created. By default this is of the form ‘2003-07-08 16:49:45,896’ (the numbers after the comma are millisecond portion of the time).
filename %(filename)s Filename portion of pathname.
levelname %(levelname)s Text logging level for the message ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL').
levelno %(levelno)s Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL).
lineno %(lineno)d Source line number where the logging call was issued (if available).

 

BJ.

잘 지켜봐야 한다 눈 부릅뜨고

Erik Karits 님의 사진, 출처: Pexels