Django 详细请求日志记录

Posted

技术标签:

【中文标题】Django 详细请求日志记录【英文标题】:Django verbose request logging 【发布时间】:2012-10-08 04:13:22 【问题描述】:

问题与this 大致相同,但是我希望django 将它的详细请求信息记录到我的logging.FileHandler - 即,而不必查看我的网络服务器日志。我尝试设置默认记录器 django.requests 以写入 4xx 和 5xx 以外的内容,但未能成功 向处理程序请求信息。

所以我在浏览文档并摆弄记录器和级别后得出的结论是 django 实际上并没有制作很多日志语句 - 所以我希望确认 django 不会在内部记录非请求的错误场景。

【问题讨论】:

【参考方案1】:

我不能说我进行了详尽的搜索,但从我在 django 1.4.1 的 django/core/handlers/base.py 看到的情况来看,django.request 记录器确实仅用于警告和错误条件 (4xx/5xx)。

也就是说,编写可以为您执行各种日志记录的中间件是微不足道的。让你开始的一些非常简单的事情可能只是:

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

【讨论】:

感谢您的回答。同意,自定义滚动解决方案非常基本。 我不确定你会得到其他东西 - 我的回答还提到我根本没有看到 django 进行成功的请求日志记录...... 你应该如何将它集成到 settings.py 中? @GiampaoloRodolà 将其添加到MIDDLEWARE_CLASSES,即MIDDLEWARE_CLASSES += ('myapp.middleware.LoggingMiddleware',),其中上面的类在文件myapp/middleware.py 这已经过时了。对于 django 1.10,请参阅***.com/a/39476411/4744937

以上是关于Django 详细请求日志记录的主要内容,如果未能解决你的问题,请参考以下文章

记录对 django-rest-framework 的请求

如何使得 HTTP 请求记录在 Domino 的日志中

laravel使用中间件记录用户请求日志

将 django 请求日志保存在文件中

Spring RestTemplate - 如何启用请求/响应的完整调试/日志记录?

AOP实现日志记录功能