Логгирование в fastapi

Как перегрузить стандартные логи фастапи? Стандартный мой лог выглядит так:

INFO:     127.0.0.1:53622 - "GET /api-key?access_token=1234567890qwertyuiop HTTP/1.1" 307 Temporary Redirect
INFO:     127.0.0.1:53622 - "GET /docs HTTP/1.1" 200 OK
INFO:     127.0.0.1:53622 - "GET /openapi.json HTTP/1.1" 200 OK
INFO:     127.0.0.1:53622 - "GET /docs HTTP/1.1" 200 OK
INFO:     127.0.0.1:53622 - "GET /openapi.json HTTP/1.1" 200 OK

А я бы хотел, чтобы там было как минимум тело запроса ещё. Можно воспользоваться logger. Но там максимум что я смогу сделать -- это добавить дату.


Ответы (1 шт):

Автор решения: hedgehogues

В отличие от uvicorn, под которым обычно запускается fastapi, в fastapi можно очень легко поменять формат вывода. Делает это удалением логгера fastapi и созданием нового, кастомного. На этот счёт существует две ссылки.

def make_logger(rotation_size, level):
    logger.remove()
    pid = os.getpid()
    dt = datetime.datetime.now()
    logger.add(
        f'data/logs/fastapi-{dt}-{pid}.log',
        rotation=rotation_size,
        enqueue=True,
        backtrace=True,
        level=level,
        format="{time} %s {level} {message}" % pid,
    )
    return logger.bind()
→ Ссылка