/request-id-django-log

:bookmark: A simple way to implement request_id in Django

Primary LanguagePython

Request ID Django Log

Build Status Maintainability Test Coverage Coverage Status PyPI version Code style: black Downloads Downloads Downloads Say Thanks!

Install

pip install request-id-django-log

Update your INSTALLED_APPS and MIDDLEWARE

INSTALLED_APPS = [
    ...
    "request_id_django_log",
]
MIDDLEWARE = [
    ...
    "request_id_django_log.middleware.RequestIdDjangoLog",
]

Configure

The following options are used by this library:

REQUEST_ID_CONFIG = {
    "REQUEST_ID_HEADER": "HTTP_X_REQUEST_ID",
    "GENERATE_REQUEST_ID_IF_NOT_FOUND": True,
    "RESPONSE_HEADER_REQUEST_ID": "HTTP_X_REQUEST_ID",
}
  • REQUEST_ID_HEADER is the header name which will hold the received request_id. This must be used when another system is responsible for generating the request_ids and sending them to your django application.
  • GENERATE_REQUEST_ID_IF_NOT_FOUND If set to true, a new request_id will be generated if none was previously supplied.
  • RESPONSE_HEADER_REQUEST_ID sets the name of the response header which will hold the value of the request_id.

With this configuration if the request have the header X-REQUEST-ID the library will use this header value.

Logs

If you want your logs to have the request id, add the following lines to your logging dictionary configuration:

LOGGING = {
    ...
    "filters": {"request_id": {"()": "request_id_django_log.filters.RequestIDFilter"}},
    "formatters": {
        "standard": {
            ...
            "format": "%(levelname)-8s [%(asctime)s] [%(request_id)s] %(name)s: %(message)s",
        },
        ...
    },
    "handlers": {
        "console": {
            ...
            "filters": ["request_id"],
            ...
        }
    },
    "loggers": {
        "": {"level": "INFO", "handlers": ["console"]},
        ...
    },
}

Supported Versions

  • python 2.7 with Django 1.8, 1.9 and 1.11
  • python 3.5, 3.6 and 3.7 with Django 1.8, 1.9, 1.11, 2.0, 2.1, 2.2 and 3.0