当Debug = False时如何记录有关404错误的信息

时间:2020-02-16 11:53:53

标签: django django-logging

我有一个正在生产的django项目。在我的settings.py文件Debug=False中,为了避免在Debug=True时出现的安全风险,我听说了我要设置的python日志记录模块。但是在阅读了我理解的文档之后,我应该将日志记录实例放置在可以捕获错误的每段代码中,但是如果我需要处理404错误该怎么办?我该如何处理?请任何人指导我

1 个答案:

答案 0 :(得分:1)

我认为在Django中有很多有关404处理的信息。最基本的事情可能是您可以使用自定义逻辑覆盖的404视图(我认为这不是首选,但在某些特定情况下可能会派上用场):https://docs.djangoproject.com/en/3.0/topics/http/views/#customizing-error-views

首选方法将更深入地了解请求和响应处理的核心,您可以在其中处理响应状态代码为404或诸如此类的请求。在您的middleware中,您可以扩展和覆盖现有中间件的行为,也可以添加自己的中间件:https://docs.djangoproject.com/en/3.0/topics/http/middleware/

下面有一个简单的中间件示例,该示例检查响应的状态码并在响应的status_code为log.warning时使用404。在这种情况下,您将只有一个位置负责记录所请求的错误路径。

# myproject.middleware.py
import logging

logger = logging.getLogger(__name__)


class PageNotFoundMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        if response.status_code == 404:
            logger.warning("Page not found at {}".format(request.path))
        return response

现在在您的settings.py中,您可以添加中间件:

MIDDLEWARE = [
   ...
   'myproject.middleware.PageNotFoundMiddleware',
]