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.3.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.3.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fastapi_glogger-0.3.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.3.0.tar.gz
Algorithm Hash digest
SHA256 b76d89ccc19b217dc60f2ffc89801e35dc789fed622a8a681887acabb6b7aee0
MD5 95135a8aeab7d15b17208a48399919bb
BLAKE2b-256 69a6f193fb534de149a23cdd9739fe67919d6cda60182dd1adfbbf7407396f20

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for fastapi_glogger-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f8ed2e4772f7b95720ab1882d2727e3e7206870bc8c0a68a2f0e7735a79f978a
MD5 afea8a6ff4cdba2e6a4cd5fd2250023d
BLAKE2b-256 0f4129e03fe3df42ba13519230b33ca66bf7570ec31f4b8e4ba6f110a920d786

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