파이썬에서도 날짜 별로, 특정 주기마다 로그 파일을 자동으로 생성할 수 있다.
(trace Id도 설정하면 좋으련만...)
구글링을 하면서 정리한 내용을 아래에 작성해보겠다.
.json, .yaml, .conf, .py 파일에서 로그 파일 설정을 할 수 있다.
여기선 .conf를 사용하겠다.
- app/config/logger.conf
-
[loggers] keys = root [handlers] keys = stream_handler, file_handler [formatters] keys = stream_formatter, file_formatter [logger_root] level = NOTSET handlers = stream_handler, file_handler qualname = propagate = 0 # handler [handler_stream_handler] class = StreamHandler level = DEBUG formatter = stream_formatter args = (sys.stdout,) [handler_file_handler] class = handlers.TimedRotatingFileHandler level = NOTSET formatter = file_formatter args = ("./logs/logfile.log", "midnight", 1) # formatter [formatter_stream_formatter] format = %(levelname)s[%(asctime)s] filename=%(name)s: %(funcName)s(), message: %(message)s, call_trace: [code_line: %(lineno)s] %(pathname)s [formatter_file_formatter] format = {"asctime": "%(asctime)s", "log_level": "%(levelname)s", "filename": "%(name)s", "function": "%(funcName)s()", "message": "%(message)s", "call_trace": "[code_line: %(lineno)s] %(pathname)s"} datefmt =
- class = FileHandler 대신에 handlers.TimedRotatingFileHandler를 사용하면 된다.
- logging 문법에 따라 logger에 표현될 내용을 작성하면 된다.
-
- app/main.py
-
import logging # setup loggers logging.config.fileConfig( "app/support/logging.conf", disable_existing_loggers=False ) # get root logger logger = logging.getLogger(__name__)
- FastAPI() 선언과 같은 시점에 해주면 된다.
- fileConfig는 절대 경로
- logger를 사용하는 파일에서 logger = logging.getLoger(__name__)을 선언하여 사용하면 된다.
- FastAPI() 선언과 같은 시점에 해주면 된다.
-
[참고 글]
'서비스 출시 및 운영' 카테고리의 다른 글
로그 데이터를 어떻게 저장하고 사용해야 할까 (0) | 2024.05.13 |
---|---|
Python structlog (0) | 2024.05.03 |