Framework-agnostic HTTP logger with payload masking
Project description
blackbox_logger
A framework-agnostic HTTP logger for Python apps. Logs requests and responses while masking sensitive data like passwords and tokens.
Features
- Request/response logging
- Payload masking (e.g. passwords, secrets)
- Works with any Python HTTP framework (Flask, Django, FastAPI, WSGI)
Install
pip install git+https://github.com/yourusername/blackbox_logger.git
📘 Usage Examples for Each Framework
🔹 Flask
from flask import Flask, request, g
from blackbox_logger import HTTPLogger
app = Flask(__name__)
logger = HTTPLogger(get_user=lambda headers: headers.get("X-User", "Anonymous"))
@app.before_request
def before():
g.request_body = request.get_data()
logger.log_request(
method=request.method,
path=request.path,
headers=request.headers,
body=g.request_body,
request=request,
)
@app.after_request
def after(response):
logger.log_response(
method=request.method,
path=request.path,
headers=request.headers,
response_body=response.get_data(),
status_code=response.status_code,
request=request,
)
return response
🔹 Django
from django.utils.deprecation import MiddlewareMixin
from blackbox_logger import HTTPLogger
logger = HTTPLogger(get_user=lambda request: request.user.username if request.user.is_authenticated else "Anonymous")
class BlackboxLoggerMiddleware(MiddlewareMixin):
def process_request(self, request):
request._body_payload = request.body
logger.log_request(
method=request.method,
path=request.get_full_path(),
headers=request.headers,
body=request.body,
request=request,
)
def process_response(self, request, response):
logger.log_response(
method=request.method,
path=request.get_full_path(),
headers=request.headers,
response_body=response.content,
status_code=response.status_code,
request=request,
)
return response
🔹 FastAPI
from fastapi import FastAPI, Request
from blackbox_logger import HTTPLogger
app = FastAPI()
logger = HTTPLogger(get_user=lambda headers: headers.get("X-User", "Anonymous"))
@app.middleware("http")
async def log_requests(request: Request, call_next):
body = await request.body()
logger.log_request(
method=request.method,
path=request.url.path,
headers=request.headers,
body=body,
request=request,
)
response = await call_next(request)
logger.log_response(
method=request.method,
path=request.url.path,
headers=request.headers,
response_body=response.body,
status_code=response.status_code,
request=request,
)
return response
🔹 WSGI (e.g., Gunicorn)
For WSGI applications, you can use the WSGIRequestLogger middleware:
from blackbox_logger import HTTPLogger
class WSGIRequestLogger:
def __init__(self, app, get_user=None, get_client_ip=None):
self.app = app
self.logger = HTTPLogger(get_user=get_user, get_client_ip=get_client_ip)
def __call__(self, environ, start_response):
method = environ.get('REQUEST_METHOD')
path = environ.get('PATH_INFO')
headers = {key: value for key, value in environ.items() if key.startswith('HTTP_')}
body = environ.get('wsgi.input').read()
client_ip = environ.get('REMOTE_ADDR')
self.logger.log_request(
method=method,
path=path,
headers=headers,
body=body,
request=environ,
)
def custom_start_response(status, response_headers, exc_info=None):
self.logger.log_response(
method=method,
path=path,
headers=headers,
response_body=status,
status_code=status.split()[0],
request=environ,
)
return start_response(status, response_headers, exc_info)
return self.app(environ, custom_start_response)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
blackbox_logger-0.1.0.tar.gz
(3.4 kB
view details)
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 blackbox_logger-0.1.0.tar.gz.
File metadata
- Download URL: blackbox_logger-0.1.0.tar.gz
- Upload date:
- Size: 3.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90401e840d6fb2140eff77a1542fe39fa3731972540d692caa39e42fd252b57d
|
|
| MD5 |
d0404037e1b7b868432aaabddba67b40
|
|
| BLAKE2b-256 |
3ca24b9f879939edfa0482d5548e2a056577aa6752062d1e51f59e858d586de4
|
File details
Details for the file blackbox_logger-0.1.0-py3-none-any.whl.
File metadata
- Download URL: blackbox_logger-0.1.0-py3-none-any.whl
- Upload date:
- Size: 3.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9742553f99efc2e81043df9b477f7783993302a8035a1e8363681a62b87b9049
|
|
| MD5 |
13be88a5a52be7799e392270878cbd6e
|
|
| BLAKE2b-256 |
7a3945fca6b25362e1b055bfbed36786cdba8230ca32003a94750121370f289d
|