Fastapi_glogger
This is a package for formatting your fastapi logs into structured google logs to be used with google cloud services like cloud run.
Installation
Packge
Install the package using pip (only test package is available right now):
pip install fastapi_glogger
Source Code
After cloning the repo
install dependencies using poetry
poetry install
Look the a main.py for a an example how to use it with FastAPI
from fastapi import FastAPI
from src.fastapi_glogger import setup_fastapi
import logging
app = setup_fastapi(FastAPI())
@app.get("/")
async def root():
logging.info("Hello World")
return {"message": "Hello World"}
Test mode (Locally)
To run the example code or package locally:
- set the environment variable
IS_TESTtotrue as it will need GOOGLE_APPLICATION_CREDENTIALSenv variable otherwise to authenticate with google cloud logging.
On GCP (Cloud)
using cloud run you can deploy a container and the env variable gets set automatically from your account data.
API
setup_fastapi(app: FastAPI, additional_headers: Optional[Dict[str, str]] =None) -> FastAPI
app: the fast api constructoradditional_headers: dictionary where you specify:key: the string you want injected the formatted logvalue: the header that you want injected ex: {'testInject':'test'} it gets test from headers and puts it inside testInject in the outputted log
Examples
Additional Headers
Import and use the package in your Python script:
from fastapi import FastAPI
from fastapi_glogger import setup_fastapi
import logging
app = setup_fastapi(FastAPI(), {"testInjected": "test"})
@app.get("/")
def read_root():
logging.info("Hello world")
return {"Hello world"}
The logged message should be outputted like this
{
"severity": "INFO",
"timestamp": "2024-09-05 09:48:01,485",
"pathname": "/app/main.py",
"logger_name": "root",
"logging.googleapis.com/sourceLocation": {
"file": "main.py",
"line": "9",
"function": "read_root"
},
"logging.googleapis.com/spanId": 9508110491393966220,
"auditInfo": {
"http_request": {
"request_method": "GET",
"request_url": "http://gcp-url/",
"user_agent": "curl/7.36.1",
"remote_ip": "52.12.45.123",
"referer": null,
"protocol": "https"
},
"testInjected": "This is test content"
},
"message": "[main:9]: Hello World"
}
Overriding exception handling
there is an existing wrapper over the fastapi exception handling for HTTPException and RequestValidationError that just
adds a layer of logging above the fastapi handling.
you can override these by adding your own exception handling code after setting up the formatter.
from fastapi import FastAPI
from fastapi_glogger import setup_fastapi
from fastapi.exceptions import RequestValidationError, HTTPException as StarletteHTTPException
import logging
app = setup_fastapi(FastAPI(), additional_headers={"TestInjected": "test"})
@app.add_exception_handler(StarletteHTTPException)
async def http_exception_handler(request, exc):
logging.error(f"HTTP Exception: {exc.detail}")
return exc
@app.get("/")
async def root():
logging.info("Hello World")
return {"message": "Hello World"}
License
Metadata
Release files for fastapi-glogger 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fastapi_glogger-0.3.0.tar.gz | 6.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fastapi_glogger-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 14.1 kB
Release files / fastapi_glogger-0.3.0.tar.gz
| Download URL | fastapi_glogger-0.3.0.tar.gz |
|---|---|
| Size | 6.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b76d89ccc19b217dc60f2ffc89801e35dc789fed622a8a681887acabb6b7aee0
|
|
BLAKE2b-256 checksum How to use checksums |
69a6f193fb534de149a23cdd9739fe67919d6cda60182dd1adfbbf7407396f20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.7
|
Release files / fastapi_glogger-0.3.0-py3-none-any.whl
| Download URL | fastapi_glogger-0.3.0-py3-none-any.whl |
|---|---|
| Size | 7.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f8ed2e4772f7b95720ab1882d2727e3e7206870bc8c0a68a2f0e7735a79f978a
|
|
BLAKE2b-256 checksum How to use checksums |
0f4129e03fe3df42ba13519230b33ca66bf7570ec31f4b8e4ba6f110a920d786
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.7
|