在我们的Web应用程序中,用户不小心在多个选项卡中打开登录页面并在Django中触发“ CSRF令牌丢失或不正确”错误是很常见的。
我想在我们的日志记录中禁止显示此特定消息,因为它会产生很多噪音,并且该问题实际上无法解决。 另一方面,登录过程中的任何其他问题都应记录下来,因此我不想从记录中排除整个Django应用或类。
您对如何禁止显示此特定的常见错误消息有任何建议吗?
答案 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',
},
}