Django(CSRF凭证遗失或不正确)禁止记录

时间:2019-05-21 09:18:29

标签: django logging

在我们的Web应用程序中,用户不小心在多个选项卡中打开登录页面并在Django中触发“ CSRF令牌丢失或不正确”错误是很常见的。

我想在我们的日志记录中禁止显示此特定消息,因为它会产生很多噪音,并且该问题实际上无法解决。 另一方面,登录过程中的任何其他问题都应记录下来,因此我不想从记录中排除整个Django应用或类。

您对如何禁止显示此特定的常见错误消息有任何建议吗?

2 个答案:

答案 0 :(得分:2)

根据官方 django documentation,您可以通过以下方式更新LOGGING设置:

'handlers': {
    'null': {
        'class': 'logging.NullHandler',
    },
},
'loggers': {
    'django.security.csrf': {
        'handlers': ['null'],
        'propagate': False,
    },
},

答案 1 :(得分:1)

如果您只想抑制此特定错误,但仍记录其他与CSRF相关的错误,则会有些棘手。

CSRF模块使用名为django.security.csrf的记录器。该消息记录在_reject method of the CsrfViewMiddleware中。您可以向该记录器添加一个过滤器,以过滤出args中具有该错误原因的日志记录。看起来像这样:

from django.middleware.csrf import REASON_BAD_TOKEN

def missing_token_filter(record):
    return REASON_BAD_TOKEN not in record.args

LOGGING = {
   ...,
   'handlers': {
       ...
       'django.security.csrf': {
           'filters': ['missing_token_filter']
       }
   },
   'filters': {
       ...,
       'missing_token_filter: {
           '()': 'path.to.missing_token_filter',
       },
}