본문 바로가기
서비스 출시 및 운영

Python logging

by 스티브 십잡스 2024. 2. 19.

파이썬에서도 날짜 별로, 특정 주기마다 로그 파일을 자동으로 생성할 수 있다.

(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__)을 선언하여 사용하면 된다.

[참고 글]

 

python :: 파이썬 logging 활용하여 일단위 로그 파일 생성하기 (feat. 로깅이란)

개발을 하다 보면 에러가 자주 발생한다. (내가 짠 코드가 한 번에 잘 실행되면 불안할 정도..) 이 때, 에러의 원인을 찾기 위해 우리는 실시간으로 '로그'를 찍는다. (logging) 혹은 잘 돌고 있는지

toramko.tistory.com

 

 

velog

 

velog.io