Augments each request with unique request_id
attribute and provides
request id logging helpers.
Developed and used at en.ig.ma software shop.
Include django-request-id
in your requirements.txt
file.
Add request_id
to INSTALLED_APPS
(necessary only if you are
going to use the {% request_id %}
template tag).
Add request_id.middleware.RequestIdMiddleware
at the top of
the MIDDLEWARE
Django setting.
The app integrates with the standard Python/Django logging by defining
a filter that puts a request_id
variable in scope of every log message.
First add a filter definition to the Django LOGGING
settings:
"filters": {
"request_id": {
"()": "request_id.logging.RequestIdFilter"
}
}
Then enable the filter for related handlers:
"handlers": {
"console": {
...
"filters": ["request_id"],
}
}
And finally modify formatter output format to include the %(request_id)
placeholder:
"formatters": {
"console": {
"format": "%(asctime)s - %(levelname)-5s [%(name)s] request_id=%(request_id)s %(message)s"
}
}
A full Django logging config example may look like this:
LOGGING= {
"version": 1,
"disable_existing_loggers": False,
"filters": {
"request_id": {
"()": "request_id.logging.RequestIdFilter"
}
},
"formatters": {
"console": {
"format": "%(asctime)s - %(levelname)-5s [%(name)s] request_id=%(request_id)s %(message)s",
"datefmt": "%H:%M:%S"
}
},
"handlers": {
"console": {
"level": "DEBUG",
"filters": ["request_id"],
"class": "logging.StreamHandler",
"formatter": "console"
}
},
"loggers": {
"": {
"level": "DEBUG",
"handlers": ["console"]
}
}
}
Make sure that your web server adds a X-Request-ID
header to each request
(and logs it in the server log for further matching of the server and app log entries).
a2enmod
the unique_id
module and set REQUEST_ID_HEADER = "UNIQUE_ID"
in the Django project
settings.If you can’t generate the X-Request-Id header at the web server level then
simply set REQUEST_ID_HEADER = None
in your project settings and the
app will generate a unique id value automatically instead of retrieving
it from the wsgi environment.
For more info on server configs see server-config.
None.
The full documentation is at http://django-request-id.rtfd.org.
There’s also an instant demo example that can be run from the cloned repository:
python demo.py
See the integration in action on Heroku:
django-request-id
is released under the MIT license.