【问题标题】:Django (CSRF token missing or incorrect) suppress loggingDjango(CSRF 令牌丢失或不正确)抑制日志记录
【发布时间】:2019-10-07 15:49:12
【问题描述】:

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

我想在我们的日志记录中隐藏这条特定消息,因为它会产生大量噪音,而且问题无法真正解决。 另一方面,应该记录登录过程中的任何其他问题,所以我不想从记录中排除整个 Django 应用程序或类。

您对如何抑制这个特定的常见错误消息有什么建议吗?

【问题讨论】:

    标签: django logging


    【解决方案1】:

    根据官方 django documentation,您可以更新您的LOGGING 设置:

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

    【讨论】:

      【解决方案2】:

      如果你只想抑制这个特定的错误,但仍然记录其他与 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',
             },
      }
      

      【讨论】:

        猜你喜欢
        • 2021-07-14
        • 2021-11-13
        • 2012-04-20
        • 2012-09-25
        • 1970-01-01
        • 1970-01-01
        • 2016-05-12
        • 2016-06-10
        • 2017-09-14
        相关资源
        最近更新 更多