Http tracing middleware for chocs library.
Project description
Chocs-Trace
Http tracing middleware for chocs library.
Installation
Poetry:
poetry add chocs-middleware.trace
Pip:
pip install chocs-middleware.trace
Features
- Automatic generation and propagation of tracing headers (x-request-id, x-correlation-id, x-causation-id)
- Sentry integration
- More intuitive log formatting options
- Structured logging
Usage
Support tracing in your responses
from chocs_middleware.trace import TraceMiddleware
from chocs import Application, HttpRequest, HttpResponse
# id_prefix will ensure generated tracing headers to contain your prefix
app = Application(TraceMiddleware(id_prefix="service-name-"))
@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
return HttpResponse("Hello!") # tracing middleware will automatically attach x-request-id, x-correlation-id, x-causation-id headers to your response
Tracing requests
from chocs_middleware.trace import TraceMiddleware, HttpStrategy
from chocs import Application, HttpRequest, HttpResponse
import requests
# http_strategy will try to detect requests library and use it to add tracing headers in all your requests
# if it fails to detect requests library it will fallback to urllib3
app = Application(TraceMiddleware(http_strategy=HttpStrategy.AUTO))
@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
requests.get("http://example.com/test") # middleware will automatically attach x-correlation-id, x-causation-id and x-request-id headers to your request
return HttpResponse("Hello!")
# when using the requests.request method you will need to add headers for it to use, otherwise it will generate default headers and is unable to attach x-correlation-id, x-causation-id and x-request-id headers
@app.get("/test")
def say_hello(req: HttpRequest, headers=req.headers) -> HttpResponse:
response = requests.request("GET", "http://test.com/")
assert response.content == b"ok"
return HttpResponse("OK")
Using logger
from chocs import Application, HttpRequest, HttpResponse
from chocs_middleware.trace import TraceMiddleware, Logger
app = Application(TraceMiddleware())
@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
logger = Logger.get("logger_name")
logger.info("Hello {name}!", name="Bob") # will output to log stream Hello Bob!
return HttpResponse("Hello!")
Formatting message
from chocs import Application, HttpRequest, HttpResponse
from chocs_middleware.trace import TraceMiddleware, Logger
app = Application(TraceMiddleware())
@app.get("/hello")
def say_hello(req: HttpRequest) -> HttpResponse:
logger = Logger.get("logger_name", message_format="[{level}] {tags.request.x-correlation-id} {msg}")
logger.info("Hello {name}!", name="Bob") # will output to log stream Hello Bob!
return HttpResponse("Hello!")
Available formatting options
Name | Example value | Description |
---|---|---|
{level} |
DEBUG | Log level name |
{msg} |
Example message | Log message after interpolation |
{log_message} |
Example {name} | Log message before interpolation |
{timestamp} |
2022-03-07T20:06:23.453866 | Time of the logged message |
{filename} |
example.py | Name of the python file where message was log |
{funcName} |
example_function | Name of the function where message was log |
{module} |
example_module | Name of the module where message was log |
{pathname} |
example/path | Path name of the file where message was log |
{tags.*} |
some value | Custom tag value set by calling Logger.set_tag function |
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
File details
Details for the file chocs_middleware_trace-0.4.3.tar.gz
.
File metadata
- Download URL: chocs_middleware_trace-0.4.3.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.4.1 CPython/3.8.16 Linux/5.15.0-1034-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe19bd104e9ff95a1044618c6a4dc81fba3ef9356f40057b6781e51bf062ca45 |
|
MD5 | 2e88707f2fc4dac0e4b6941b4bc2b7bb |
|
BLAKE2b-256 | c16d2ededaad91dabe4602095fee005da85be23643600c01439e1ef7c7cfc2d5 |