django logging - django.request logger and extra context
The django-requestlogging middleware plugin makes it easy to log request-related information without adjusting all your logging calls to add the request
with the extra
parameter. It's then just a matter of configuring your loggers.
The following items can be logged when using django-requestlogging:
- username
- http_user_agent
- path_info
- remote_add
- request_method
- server_protocol
You can't use request.user
in the format string, as %-formatting doesn't handle that. You could use a format string such as
'[%(asctime)s] %(levelname)s %(module)s %(message)s %(user)s'
and, in your logging call, use something like
logger.debug('My message with %s', 'args', extra={'user': request.user})
The extra
dict is merged into the logging event record, which ends up with a user
attribute, and this then gets picked up through the format string and appears in the log.
If using the django.request
logger, the status_code and the request will be passed in the extra
dict by Django. If you need the request.user
, you'll probably need to add a logging.Filter
which does something like:
class RequestUserFilter(logging.Filter):
def filter(self, record):
record.user = record.request.user
return True
so that you can show the user in the formatted output.