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.

Revisions

  1. fermayo created this gist Jan 18, 2018.
    26 changes: 26 additions & 0 deletions middleware.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,26 @@
    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
    21 changes: 21 additions & 0 deletions settings.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    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',
    },
    },
    }