fastapi gcp log formatting package
Project description
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 --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/ starlette-gcp-logs==0.0.2
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 src.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
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi_glogger-0.1.0.tar.gz.
File metadata
- Download URL: fastapi_glogger-0.1.0.tar.gz
- Upload date:
- Size: 6.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94a397db016eb1fad482ae310fc0b7cd87d21e5c08f2982baee7f1cf08eb621c
|
|
| MD5 |
8634cfbc6e6cbdd82c0f5fea77dbaf28
|
|
| BLAKE2b-256 |
c278189e3c287d2761f3dd1f10f971b9e7a74ba5eed7a30e140af229bd53dec0
|
File details
Details for the file fastapi_glogger-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fastapi_glogger-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73fe35a56c6f80e054ce914ad4d9760a091d0288ee3878407ae425d39e3ba415
|
|
| MD5 |
f37928a0097d3507b335dbe5dbd4cb79
|
|
| BLAKE2b-256 |
f8160d88b287341da8b25d87154ee66c2fc4c6d508821fcad2ce6e582f94febc
|