您必须确认两两件事:
- 要发送使用Python的内置的日志系统和
- 您还没有登录正规例外,这样用于发送电子邮件内置的机制将无法正常工作的邮件因为它取决于要传递的异常类型对象以及要存储在回溯中的内容。
反正,不是不可能!
LOGGING = {
...
'handlers': {
...
'my_special_mail_handler': {
'level': 'ERROR',
'filters': [],
'class': 'myapp.loggers.MyEmailHandler',
'include_html': False,
},
},
'loggers': {
...
'my_special_logger': {
'handlers': ['console', 'my_special_mail_handler'],
'level': 'DEBUG',
'propagate': True,
},
}
}
MY_RECIPIENTS = (("Name of person", "[email protected]"),)
......东西被合并到您的设置中。
然后,有你特别的日志类,MyEmailHandler:
from django.utils.log import AdminEmailHandler
from django.core.mail.message import EmailMultiAlternatives
from django.conf import settings
class MyEmailHandler(AdminEmailHandler):
def emit(self, record):
if not getattr(settings, "MY_RECIPIENTS", None):
return
subject = self.format_subject(record.getMessage())
message = getattr(record, "email_body", record.getMessage())
mail = EmailMultiAlternatives(u'%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
message, settings.SERVER_EMAIL, [a[1] for a in settings.MY_RECIPIENTS],)
mail.send(fail_silently=False)
现在,您可以创建一个特殊的日志条目,既是通过电子邮件发送并输出到终端这样:
import logging
logger = logging.getLogger("my_special_logger")
error = logger.makeRecord(
logger.name, logging.ERROR, 0, 0,
u"Subject: Some error occured",
None, None, "", None,
)
error.email_body = msg
logger.handle(error)
并使东西容易,使用实用功能:
import logging
def my_log(msg, body, level=logging.ERROR):
logger = logging.getLogger("my_special_logger")
error = logger.makeRecord(
logger.name, level, 0, 0,
u"Subject: Some error occured",
None, None, "", None,
)
error.email_body = msg
logger.handle(error)
为了更好地帮助您,请您张贴您的记录器配置(来自settings.py)? – jvc26 2012-04-08 07:50:48