仅在控制台中记录IOError,不发送邮件

时间:2015-02-16 08:30:09

标签: django

在我的Django项目中,我了解有时用户将数据上传到网站时发生的IOErrors。发生IOErrors时,我不想关闭电子邮件通知。

我发现了如何编写过滤器,所以我可以get rid of the IOError。但是如何更改此更改以记录错误,但仅限于控制台,而不是每封邮件。

settings.py

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        },
        'suppress_unreadable_post': {
            '()': 'django.utils.log.CallbackFilter',
            'callback': SuppressUnreadablePost,
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'include_html': True,
            'class': 'django.utils.log.AdminEmailHandler'
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'myapp': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
        'ratelimitbackend': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    }
}

我的过滤器:

import sys, traceback

class SuppressUnreadablePost(object):
    def filter(self, record):
        _, exception, tb = sys.exc_info()
        if isinstance(exception, IOError):
            for _, _, function, _ in traceback.extract_tb(tb):
                if function == '_get_raw_post_data':
                    return False
        return True

想法:)?谢谢!

1 个答案:

答案 0 :(得分:2)

假设您的过滤器正确无误,您只需编辑mail_admins处理程序即可添加过滤器:

   'mail_admins': {
        'level': 'ERROR',
        'filters': ['require_debug_false', 'suppress_unreadable_post'],
        'include_html': True,
        'class': 'django.utils.log.AdminEmailHandler'
    }

https://docs.djangoproject.com/en/1.7/topics/logging/#django.utils.log.CallbackFilter