Django verbose request logging

2020-02-12 01:27发布

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.

1条回答
孤傲高冷的网名
2楼-- · 2020-02-12 02:17

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
查看更多
登录 后发表回答