Skip to content

Instantly share code, notes, and snippets.

@fermayo
Created January 18, 2018 18:50
Show Gist options
  • Save fermayo/c7bf41d63bd69f6640cf6c76a31f1305 to your computer and use it in GitHub Desktop.
Save fermayo/c7bf41d63bd69f6640cf6c76a31f1305 to your computer and use it in GitHub Desktop.
nginx-like access logging middleware for Django 2.0
import logging
import datetime
def access_logging(get_response):
logger = logging.getLogger("access_logging")
def middleware(request):
response = get_response(request)
log_format = '{remote_addr} - {remote_user} [{time_local}] "{request}" {status} {body_bytes_sent} ' \
'"{http_referer}" "{http_user_agent}" "{http_x_forwarded_for}"'
log_data = {
'remote_addr': request.META.get('REMOTE_ADDR', '-'),
'remote_user': request.META.get('REMOTE_USER', '-'),
'time_local': datetime.datetime.now().strftime("%d/%b/%Y:%H:%M:%S +0000"),
'request': "{} {} {}".format(request.META.get('REQUEST_METHOD', '-'), request.path,
request.META.get('SERVER_PROTOCOL')),
'status': response.status_code,
'body_bytes_sent': len(response.content),
'http_referer': request.META.get('HTTP_REFERER', '-'),
'http_user_agent': request.META.get('HTTP_USER_AGENT', '-'),
'http_x_forwarded_for': request.META.get('HTTP_X_FORWARDED_FOR', '-'),
}
logger.info(log_format.format(**log_data))
return response
return middleware
MIDDLEWARE.append('myapp.middleware.access_logging')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'console': {
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django': {
'handlers': ['console'],
'level': os.getenv('DJANGO_LOG_LEVEL', 'ERROR'),
},
'access_logging': {
'handlers': ['console'],
'level': 'INFO',
},
},
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment