Skip to main content

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 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

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

fastapi_glogger-0.2.0.tar.gz (6.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastapi_glogger-0.2.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_glogger-0.2.0.tar.gz.

File metadata

  • Download URL: fastapi_glogger-0.2.0.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for fastapi_glogger-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a788a6183876fa50fafd34928e36e7b02c3e58b19dc9502a9b6943627c94a129
MD5 f5e10361e54e67260163a83d74e8f1f7
BLAKE2b-256 c4554a4e24de6d009c771b987624a245edb50927592e672874f3402fbe9230c7

See more details on using hashes here.

File details

Details for the file fastapi_glogger-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fastapi_glogger-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 141ed77dd594bc233ab3a6312ac58d2f6ef1d3b15cf0facde7f96630726c8121
MD5 390cbd3cbb918e2dc9ddba4f8223b47d
BLAKE2b-256 02ccf6db8e698fe5237695fdfd35b2b4fd1134afc23b57296a23a12ea3a69a44

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page