This application formats output logs to JSON It needs to Elastic stack or for OpenSearch. There are two loggers "main" It needs for log your data, and request/response log as middleware for logging all incoming and outgoing information
- loguru
- fastapi
- stackprinter
- uvicorn
uvicorn --host=0.0.0.0 --port 8888 app.main:app --reload
Two records created.
First is from logger.info("Got /")
{ "thread": 459014, "level_name": "Information", "message": "Got /", "source_log": "main", "@timestamp": "2022年03月16日T09:51:03+03:00", "app_name": "FastAPI example application", "app_version": "0.0.1", "app_env": "dev", "duration": 649 }
Another from Middleware
{ "thread": 459014, "level_name": "Information", "message": "Answer code: 200 request url: GET \"http://127.0.0.1:8888/\" duration: 2 ms ", "source_log": "main", "@timestamp": "2022年03月16日T09:51:03+03:00", "app_name": "FastAPI example application", "app_version": "0.0.1", "app_env": "dev", "duration": 2, "request_uri": "http://127.0.0.1:8888/", "request_referer": "http://127.0.0.1:8888/docs", "request_method": "GET", "request_path": "/", "request_host": "127.0.0.1:8888", "request_size": 0, "request_content_type": "", "request_headers": { "host": "127.0.0.1:8888", "connection": "keep-alive", "sec-ch-ua": "\"Chromium\";v=\"98\", \" Not A;Brand\";v=\"99\"", "accept": "application/json", "sec-ch-ua-mobile": "?0", "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.121 Safari/537.36", "sec-ch-ua-platform": "\"Linux\"", "sec-fetch-site": "same-origin", "sec-fetch-mode": "cors", "sec-fetch-dest": "empty", "referer": "http://127.0.0.1:8888/docs", "accept-encoding": "gzip, deflate, br", "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7", "cookie": "_pk_id.1.dc78=4ec40eae396f1c32.1645453915.; GUID_20B40965CCF8B7300FCB1E3B5CB9925FB27970B0_8888=NcjlKqKxMJq9RgiYXEf3; io=fSKn7g-dE_J63nxDAAAA" }, "request_body": "", "request_direction": "in", "response_status_code": 200, "response_size": 22, "response_headers": { "content-length": "22", "content-type": "application/json" }, "response_body": "{\"answer\":\"I am Root\"}" }
.
├── app
│ ├── core
│ │ ├── logging.py - config logger object
│ │ ├── middleware.py - Middleware
│ │ └── settings.py - settings for app
│ ├── __init__.py
│ ├── main.py
│ └── schemas
│ └── json_logs.py - Pydantic Schemas for main logger & Middleware log
├── example_log.json
└── README.md