API documentation¶
django_structlog¶
django-structlog
is a structured logging integration for Django
project using structlog
.
-
class
django_structlog.middlewares.
RequestMiddleware
(get_response)¶ Bases:
django_structlog.middlewares.request.SyncRequestMiddleware
RequestMiddleware
adds request metadata tostructlog
’s logger context automatically.>>> MIDDLEWARE = [ ... # ... ... 'django_structlog.middlewares.RequestMiddleware', ... ]
-
django_structlog.middlewares.
request_middleware_router
(get_response)¶ request_middleware_router
select automatically between async or sync middleware.Use as a replacement for django_structlog.middlewares.RequestMiddleware
>>> MIDDLEWARE = [ ... # ... ... 'django_structlog.middlewares.request_middleware_router', ... ]
-
django_structlog.signals.
bind_extra_request_metadata
= <django.dispatch.dispatcher.Signal object>¶ Signal to add extra
structlog
bindings fromdjango
’s request.Parameters: logger – the logger to bind more metadata or override existing bound metadata >>> from django.dispatch import receiver >>> from django_structlog import signals >>> import structlog >>> >>> @receiver(signals.bind_extra_request_metadata) ... def bind_user_email(request, logger, **kwargs): ... structlog.contextvars.bind_contextvars(user_email=getattr(request.user, 'email', ''))
-
django_structlog.signals.
bind_extra_request_finished_metadata
= <django.dispatch.dispatcher.Signal object>¶ Signal to add extra
structlog
bindings fromdjango
’s finished request and response.Parameters: - logger – the logger to bind more metadata or override existing bound metadata
- response – the response resulting of the request
>>> from django.dispatch import receiver >>> from django_structlog import signals >>> import structlog >>> >>> @receiver(signals.bind_extra_request_finished_metadata) ... def bind_user_email(request, logger, response, **kwargs): ... structlog.contextvars.bind_contextvars(user_email=getattr(request.user, 'email', ''))
-
django_structlog.signals.
bind_extra_request_failed_metadata
= <django.dispatch.dispatcher.Signal object>¶ Signal to add extra
structlog
bindings fromdjango
’s failed request and exception.Parameters: - logger – the logger to bind more metadata or override existing bound metadata
- exception – the exception resulting of the request
>>> from django.dispatch import receiver >>> from django_structlog import signals >>> import structlog >>> >>> @receiver(signals.bind_extra_request_failed_metadata) ... def bind_user_email(request, logger, exception, **kwargs): ... structlog.contextvars.bind_contextvars(user_email=getattr(request.user, 'email', ''))
django_structlog.celery¶
celery
integration for django_structlog
.
-
class
django_structlog.celery.middlewares.
CeleryMiddleware
(get_response=None)¶ Bases:
object
CeleryMiddleware
initializescelery
signals to passdjango
’s request information tocelery
worker’s logger.>>> MIDDLEWARE = [ ... # ... ... 'django_structlog.middlewares.RequestMiddleware', ... 'django_structlog.middlewares.CeleryMiddleware', ... ]
-
django_structlog.celery.signals.
bind_extra_task_metadata
= <django.dispatch.dispatcher.Signal object>¶ Signal to add extra
structlog
bindings fromcelery
’s task.Parameters: - task – the celery task being run
- logger – the logger to bind more metadata or override existing bound metadata
>>> from django.dispatch import receiver >>> from django_structlog.celery import signals >>> import structlog >>> >>> @receiver(signals.bind_extra_task_metadata) ... def receiver_bind_extra_request_metadata(sender, signal, task=None, logger=None, **kwargs): ... structlog.contextvars.bind_contextvars(correlation_id=task.request.correlation_id)
-
django_structlog.celery.signals.
modify_context_before_task_publish
= <django.dispatch.dispatcher.Signal object>¶ Signal to modify context passed over to
celery
task’s context. You must modify thecontext
dict.Parameters: context – the context dict that will be passed over to the task runner’s logger >>> from django.dispatch import receiver >>> from django_structlog.celery import signals >>> >>> @receiver(signals.modify_context_before_task_publish) ... def receiver_modify_context_before_task_publish(sender, signal, context, **kwargs): ... keys_to_keep = {"request_id", "parent_task_id"} ... new_dict = { ... key_to_keep: context[key_to_keep] ... for key_to_keep in keys_to_keep ... if key_to_keep in context ... } ... context.clear() ... context.update(new_dict)
-
django_structlog.celery.signals.
pre_task_succeeded
= <django.dispatch.dispatcher.Signal object>¶ Signal to add
structlog
bindings fromcelery
’s successful task.Parameters: - logger – the logger to bind more metadata or override existing bound metadata
- result – result of the succeeding task
>>> from django.dispatch import receiver >>> from django_structlog.celery import signals >>> import structlog >>> >>> @receiver(signals.pre_task_succeeded) ... def receiver_pre_task_succeeded(sender, signal, logger=None, result=None, **kwargs): ... structlog.contextvars.bind_contextvars(result=str(result))