django - Django:有没有办法从 mail_admins 日志处理程序中过滤掉 503 个“服务不可用”响应?
问题描述
我已经用标准的“邮件管理员 500 错误”配置了 django LOGGING:
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
当我将站点置于维护模式(django-maintenance-mode)时,它会正确响应匿名请求的 503“服务不可用”。当站点处于维护模式时,这会导致向管理员发送大量电子邮件。我想“过滤掉 503 响应 IF 站点处于维护模式”以阻止洪水。但看不到一个简单的方法来做到这一点(例如,日志过滤器需要请求检查站点是否处于维护模式)
我知道我可以将维护错误代码更改为 400 级错误,但这似乎是非语义黑客。也可以在维护期间暂停管理员电子邮件,但这需要记住破解/恢复设置文件。希望有人有一个聪明的想法如何简单地实现这一点,没有黑客。
解决方案
您可以简单地在 settings.py 的 LOGGING 中创建过滤器“ require_not_maintenance_mode_503 ”,然后在处理程序“ mail_admins ”中添加过滤器。这将防止在 503 错误时发送电子邮件。例如:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_not_maintenance_mode_503': {
'()': 'maintenance_mode.logging.RequireNotMaintenanceMode503',
},
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'filters': ['require_not_maintenance_mode_503'],
'formatter': 'simple'
},
},
'loggers': {
'django': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
},
}
推荐阅读
- windows - 在 Windows 上的 Jenkins 容器中构建 maven 项目时找不到 Docker
- python - Pybind11 绑定访问 Gst.Buffer
- python - Python 3.7 中带有列表初始化的嵌套字典
- python - Django中的虚拟环境
- powershell - 如何最好地加快 powershell 处理时间(比较对象)
- javascript - 我无法在 Express-Gateway 上访问我想要的数据
- pandas - 如何根据条件拆分行?【熊猫数据框】
- python - 使用 .onion 域的服务器到服务器套接字连接
- python - 两个不同但相关的模型中的相同值字段
- flutter - 每当我启动 Flutter 应用程序时,就会出现 Chromium