Witam
Zacząłem się bawić Fastapi + uvicorn i napotkałem parolem z logerem. O tyle o ile wszystko co chcę ładnie mi loguje i w takim formacie jak potrzebuję to mam problem z rakami komutacyjnymi. Wysyłam ramkę GET loguje mi się że serwer taką dostał ale nie loguje mi już odpowiedzi. Chciałbym by dla INFO logowane były ramki komunikacyjne dla request i dla response.
Mój kod:
main.py
from typing import Optional
import logging
import logi
from fastapi import FastAPI
import uvicorn
lgr = logging.getLogger(__name__)
test_api = FastAPI()
@test_api.on_event("startup")
async def startup_event():
lgr.info('siemka')
@test_api.on_event("shutdown")
async def shutdown_event():
lgr.info('Nara')
@test_api.get("/")
def read_root():
return {"Hello": "World"}
@test_api.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
if __name__ == "__main__":
uvicorn.run(test_api, port=8001, log_level="info", log_config=None)
log.py
import logging
import logging.handlers
HOME_DIR = './'
LOG_LVL_FILE = logging.INFO
LOG_LVL_CONSOLE = logging.INFO
# create logger with 'spam_application'
logger = logging.getLogger('')
logger.setLevel(logging.DEBUG)
logger.handlers = []
# create file handler which logs even debug messages
fh = logging.handlers.RotatingFileHandler(HOME_DIR + "error.log",
maxBytes = 1000000,
backupCount=20,
encoding="utf8")
fh.setLevel(LOG_LVL_FILE)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(LOG_LVL_CONSOLE)
# create formatter and add it to the handlers
formatter = logging.Formatter('[%(asctime)s] - [%(levelname)s] - [%(filename)s[%(lineno)d].%(funcName)s]: %(message)s')
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)
fh.setFormatter(formatter)
Za każdym razem dla GET dostaję tylko tyle:
[2021-01-19 12:20:45,376] - [INFO] - [h11_impl.py[456].send]: 127.0.0.1:8974 - "GET / HTTP/1.1" 200
Ja chciałbym dostawić też odpowiedź jaka wyleciała z serwera na tego tera z dokładną ramką. Da się tego logera tak ustawić ?