Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django verbose request logging

Tags:

logging

django

Question is much the same as this, however I'm wanting django to log it's verbose request information to my logging.FileHandler - ie rather than having to look at my webservers logs. I've tried and failed to setup the default logger django.requests to write something other than 4xx and 5xx request information to the handlers.

So the conclusion I've come to after going through the docs and fiddling with the loggers and levels is that django does not actually make a lot of log statements - so I'm looking to confirm that django does not internally log non error scenarios for requests.

like image 355
markdsievers Avatar asked Oct 17 '12 19:10

markdsievers


1 Answers

I can't say I did an exhaustive search, but from what I can see at django/core/handlers/base.py of django 1.4.1, the django.request logger is indeed only used for warnings and error conditions (4xx/5xx).

That said, it's trivial to write middleware that will do all manner of logging for you. Something very simple to get you started could be just:

from time import time
from logging import getLogger

class LoggingMiddleware(object):
    def __init__(self):
        # arguably poor taste to use django's logger
        self.logger = getLogger('django.request')

    def process_request(self, request):
        request.timer = time()
        return None

    def process_response(self, request, response):
        self.logger.info(
            '[%s] %s (%.1fs)',
            response.status_code,
            request.get_full_path(),
            time() - request.timer
        )
        return response
like image 174
Yaniv Aknin Avatar answered Sep 27 '22 23:09

Yaniv Aknin