Skip to main content

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_TEST to true as it will need GOOGLE_APPLICATION_CREDENTIALS env 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 constructor
  • additional_headers: dictionary where you specify:
    • key: the string you want injected the formatted log
    • value: 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

MIT

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)

Source distribution for fastapi-glogger 0.3.0
File Size Uploaded
fastapi_glogger-0.3.0.tar.gz 6.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fastapi-glogger 0.3.0
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page