在我的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
想法:)?谢谢!
答案 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