Logging - minnie0531/fastapi-template GitHub Wiki

level: the minimum priority level of messages to log. In order of increasing severity, the available log levels are: DEBUG, INFO, WARNING, ERROR, and CRITICAL. By default, the level is set to WARNING, meaning that Python’s logging module will filter out any DEBUG or INFO messages.

level은 설정해준 level 이상 보여줌 warning으로 설정하면 debug나 info는 보이지 않음.

handler와 logger의 level에서 차이가 있을 때 logger가 더 낮은 것 부터 보여주면 handler는 본인의 log level부터 표현

만약 logger의 level이 더 높다면, handler는 logger로 부터 받은 내용에 대해서만 저장.

configuration

logging_config.yaml 로 아래와 같이 formatter handler를 정의 한다.

version: 1
formatters:
  simple:
    format: "%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(message)s" #Log format
    datefmt: "%Y-%m-%d %H:%M:%S"
  json:
    format: '{"time": "%(asctime)s", "name": "%(name)s", "level": "%(levelname)s", "fileName": %(filename)s,"message": "%(message)s"}'
    datefmt: "%Y-%m-%d %H:%M:%S"
handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout
  file:
    class: logging.handlers.RotatingFileHandler
    level: ERROR
    formatter: json
    filename: error.log #path can be included
    maxBytes: 1024
    backupCount: 20
    encoding: utf8
loggers:
  root: # This is a default setting for loggers. you can use console and file handler as default handlers.
    level: DEBUG
    handlers: [console, file]
    propagate: no

아래와 같이 메인 함수에서 configuration파일을 읽어 logging.config에 저장해줌

with open("./app/config/logging_config.yaml", "r") as stream:
    config = yaml.load(stream, Loader=yaml.FullLoader)
logging.config.dictConfig(config)

json형식으로 전달 하는 방법은 formatter를 dictionay형태로 설정하거나 python-json-logger 모듈을 이용하여 JSON formatter를 설정하면 됨. 직접 formatter를 구현하여 dynamic하게도 사용 가능.