Django在日志中使用AdminEmailHandler发送邮件(同步),及celery异步发送日志邮件的实现
在Django中,你可以使用AdminEmailHandler
来在日志中发送邮件。这个处理器会将日志信息转换为邮件发送给管理员。
首先,你需要在你的settings.py
中配置日志系统,并且添加AdminEmailHandler
。
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'admin_email': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
},
},
'loggers': {
'django.request': {
'handlers': ['admin_email'],
'level': 'ERROR',
'propagate': True,
},
},
}
这样配置后,任何在django.request
logger下的错误级别日志都会通过邮件发送给管理员。
对于异步发送邮件,你可以使用Celery。首先,你需要安装并设置Celery。
pip install celery
然后,在你的Django项目中设置Celery。
# celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings')
app = Celery('your_project_name')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
在你的Django应用中创建一个tasks.py
文件,并定义一个异步发送邮件的任务。
# tasks.py
from __future__ import absolute_import, unicode_literals
from celery.task import task
from django.core.mail import send_mail
@task
def send_email(subject, message, recipient_list):
send_mail(subject, message, None, recipient_list, fail_silently=False)
然后,你可以在日志处理中使用这个异步任务来发送邮件。
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'async_admin_email': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
'formatter': 'verbose',
'filters': ['special'],
'email_backend': 'django.core.mail.backends.smtp.EmailBackend',
},
},
'loggers': {
'django.request': {
'handlers': ['async_admin_email'],
'level': 'ERROR',
'propagate': True,
},
},
}
在这个配置中,async_admin_email
处理器会调用AdminEmailHandler
,但是会异步通过Celery发送邮件。你需要确保你的邮件后端配置正确,并且Celery服务正在运行。
评论已关闭