FastAPI middlewares to improve logging with stlog library
Project description
stlog-fastapi-middlewares
FastAPI/starlette middlewares to improve logging with stlog library.
Installation
pip install stlog-fastapi-middlewares
(or equivalent command for your favorite package manager)
Usage (with FastAPI)
import stlog
from fastapi import FastAPI
from fastapi.concurrency import asynccontextmanager
from stlog_fastapi_middlewares import (
AccessLogMiddleware,
CustomExceptionHandlingMiddleware,
LogContextMiddleware,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
stlog.setup()
yield
logger = stlog.getLogger(__name__)
app = FastAPI(lifespan=lifespan)
app.add_middleware(CustomExceptionHandlingMiddleware, logger=logger)
app.add_middleware(AccessLogMiddleware, logger=logger)
app.add_middleware(LogContextMiddleware, logger=logger)
@app.get("/")
async def root():
return {"message": "Hello World"}
Reference
We provide 3 independent middlewares.
CustomExceptionHandlingMiddleware
This middleware logs exceptions to structured logs.
No extra option is available.
Example:
import stlog
from fastapi import FastAPI
from fastapi.concurrency import asynccontextmanager
from stlog_fastapi_middlewares import (
CustomExceptionHandlingMiddleware,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
stlog.setup()
yield
logger = stlog.getLogger(__name__)
app = FastAPI(lifespan=lifespan)
app.add_middleware(CustomExceptionHandlingMiddleware, logger=logger)
@app.get("/exception")
async def exception():
raise Exception("test")
AccessLogMiddleware
This middleware logs access to the application (to get access logs in JSON format for example).
You can optionally provide an ignore_hook option to ignore (for access log only!) some URLs.
Example:
import stlog
from fastapi import FastAPI
from fastapi.concurrency import asynccontextmanager
from stlog_fastapi_middlewares import (
AccessLogMiddleware,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
stlog.setup()
yield
logger = stlog.getLogger(__name__)
app = FastAPI(lifespan=lifespan)
app.add_middleware(AccessLogMiddleware, logger=logger)
@app.get("/")
async def root():
return {"message": "Hello World"}
[!NOTE] As
FastAPIoruvicornalready outputs some access logs, you may want to disable them! For example, withuvicorn, you can use the--no-access-logflag.
LogContextMiddleware
This middleware adds some request context to structured logs (think of automatic request id, process id...).
There are multiple options to customize the middleware. See the corresponding code for reference.
Example:
import os
import stlog
from fastapi import FastAPI
from fastapi.concurrency import asynccontextmanager
from stlog_fastapi_middlewares import (
LogContextMiddleware,
)
@asynccontextmanager
async def lifespan(app: FastAPI):
stlog.setup()
yield
logger = stlog.getLogger(__name__)
app = FastAPI(lifespan=lifespan)
app.add_middleware(
LogContextMiddleware,
logger=logger,
add_pid=True,
add_request_id=True,
envs_to_kvs={"FOO": "foo", "BAR": "bar"},
headers_to_kvs={"X-Test-Id": "test_id"},
)
# Let's add some environment variables to test the middleware
os.environ["FOO"] = "foo2"
os.environ["BAR"] = "bar2"
@app.get("/")
async def root():
logger.info("hello world")
# => this call will output a log with the following extra keys:
# - foo
# - bar
# - pid
# - request_id
# - test_id (if the call is made with a X-Test-Id header)
return {"message": "Hello World"}
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 stlog_fastapi_middlewares-0.2.1.tar.gz.
File metadata
- Download URL: stlog_fastapi_middlewares-0.2.1.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f6431cc708680d66c1dff3e1a2ef94eae045e08812e5a5501fb9e4d13e81bb8
|
|
| MD5 |
dfca22aa62e397182b260a4d105e7c17
|
|
| BLAKE2b-256 |
307df11c8d0b80564a848f1067a1f9291edfd69a32f55b10e510089af221f49a
|
File details
Details for the file stlog_fastapi_middlewares-0.2.1-py3-none-any.whl.
File metadata
- Download URL: stlog_fastapi_middlewares-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d647951c3f35f2cad3b1f9831c0c19c473ced96e14ae14d7b01c9e3ca19b30c
|
|
| MD5 |
abd90f8d978bb513c04a67f5e816e9ad
|
|
| BLAKE2b-256 |
08362f51cbcfb9bb1c8821843cd04d585834f228d0735ca3359ef6075cc8ae77
|