簡體   English   中英

django:如何為SuspiciousOperation異常創建自定義日志記錄篩選器?

[英]django: How can I create a custom Logging Filter for SuspiciousOperation exception?

從1.8遷移到1.11(從1.8)后,我從日志記錄中收到一些SuspiciousOperation錯誤。

似乎來自JS請求,如果用戶移動鼠標,該請求可使會話保持活動狀態。 但這並不重要。

如何僅過濾此異常?

我試過的

我剛剛在某個地方創建了一個過濾器:

import logging

from django.core.exceptions import SuspiciousOperation

class StopSuspiciousOperation(logging.Filter):
    def filter(self, record):
        if record.exc_info:
            exc_value = record.exc_info[1]
            return isinstance(exc_value, SuspiciousOperation)
        return True

然后,我將此過濾器添加到配置中:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'stop_suspicious_operation': {
            '()': 'aula.utils.loggingFilters.StopSuspiciousOperation',
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false',
                        'stop_suspicious_operation',], #<-- here
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

但是我仍然收到錯誤:

內部服務器錯誤:/ keepalive

SuspiciousOperation at /keepalive
The request's session was deleted before the request completed. The user may have logged out in a concurrent request, for example.

Request Method: GET
Request URL: https://XXXXXX/YYYYYY
Django Version: 1.11.9
Python Executable: /usr/bin/python
Python Version: 2.7.3

我不確定正確的答案,但是我認為django在WSGI級別上正在捕獲SuspiciousOperation,並且正在記錄錯誤。 參見: https : //docs.djangoproject.com/en/dev/ref/exceptions/#suspiciousoperation

如果SuspiciousOperation異常達到WSGI處理程序級別,則將其記錄為錯誤級別,並導致HttpResponseBadRequest。

您可能只想過濾出這樣的錯誤請求:

from logging import LogRecord


def filter_400(record: LogRecord) -> bool:
    '''Filter out HTTP Error Code 400 Bad Request'''
    return record.status_code != 400

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM