是否可以将Django的SafeExceptionReporterFilter与AdminEmailHandler一起使用?

时间:2015-04-16 15:30:22

标签: python django logging filter error-logging

我尝试使用Django' @sensitive_post_parameters过滤掉敏感信息。我认为将这些注释添加到几个特定的​​功能上就足够了,但它不起作用。我在SafeExceptionReporterFilter内设置了断点,只有在从AdminEmailHandler而不是其他处理程序调用时才会中断。我错过了什么?

2 个答案:

答案 0 :(得分:2)

您可以编写使用django.views.debug.ExceptionReporter格式化异常的自定义Handler

使用ExceptionReporter

的示例
from django.views.debug import ExceptionReporter

# exc_type, exc_value, traceback are a standard exception
# tuple as returned by sys.exc_info
reporter = ExceptionReporter(request, exc_type, exc_value, traceback)
html_report = reporter.get_traceback_html()
text_report = reporter.get_traceback_text()

ExceptionReporter将使用ExceptionReporterFilter设置定义的DEFAULT_EXCEPTION_REPORTER_FILTER,默认情况下为SafeExceptionReporterFilter

查看AdminEmailHandler的{​​{3}}以获取有关如何创建自定义Handler的信息。

答案 1 :(得分:1)

即使使用SafeExceptionReporterFilter,异常仍将包含敏感数据(例如服务器的ENV变量和其他运行时数据)。

为避免暴露敏感数据,您不应使用此过滤器。相反,编写自己的异常处理程序中间件并有选择地(递归地?)从日志中获取所需的数据。

请参阅sys.exc_info,了解如何获取异常的追溯以及如何根据您的需要使用它。

即使您使用CustomHandler,您也会受到特定处理程序的限制,据我所知,第三方处理程序将不会使用SafeExceptionReporterFilter