Python Django 1.9自定义日志处理程序类:“0”;无法配置处理程序';邮件管理员';:应用程序不是';“我还没装。”;

Python Django 1.9自定义日志处理程序类:“0”;无法配置处理程序';邮件管理员';:应用程序不是';“我还没装。”;,python,django,django-1.9,Python,Django,Django 1.9,我正在将现有的Django应用程序从1.8升级到1.9(特别是1.9.4)。我使用自定义日志处理程序通过第三方电子邮件提供商(SendGrid)发送管理员错误电子邮件 执行runserver命令时,将生成以下回溯: 回溯(最近一次呼叫最后一次): 文件“manage.py”,第10行,在 从命令行(sys.argv)执行命令 文件“/Users/coredev/.virtualenvs/django19/lib/python3.4/site packages/django/core/manage

我正在将现有的Django应用程序从1.8升级到1.9(特别是1.9.4)。我使用自定义日志处理程序通过第三方电子邮件提供商(SendGrid)发送管理员错误电子邮件

执行
runserver
命令时,将生成以下回溯:

回溯(最近一次呼叫最后一次):
文件“manage.py”,第10行,在
从命令行(sys.argv)执行命令
文件“/Users/coredev/.virtualenvs/django19/lib/python3.4/site packages/django/core/management/_init__.py”,第353行,从命令行执行
utility.execute()
文件“/Users/coredev/.virtualenvs/django19/lib/python3.4/site packages/django/core/management/_init__.py”,第327行,在execute中
django.setup()
文件“/Users/coredev/.virtualenvs/django19/lib/python3.4/site packages/django/\uuuu init\uuuuuu.py”,第17行,在安装程序中
配置日志记录(settings.logging\u CONFIG,settings.logging)
文件“/Users/coredev/.virtualenvs/django19/lib/python3.4/site packages/django/utils/log.py”,第71行,在configure_logging中
日志记录\配置\函数(日志记录\设置)
文件“/usr/local/ceral/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py”,第789行,在dictConfig中
dictConfigClass(config).configure()
文件“/usr/local/ceral/python3/3.4.2_1/Frameworks/Python.framework/Versions/3.4/lib/python3.4/logging/config.py”,第565行,在configure中
“%r:%s%”(名称,e))
ValueError:无法配置处理程序“邮件管理员”:尚未加载应用程序。
以下是自定义日志记录类的相关代码段:

settings.LOGGING中的自定义处理程序:
“邮件管理员”:{
“级别”:“错误”,
'class':'coredev.utils.logging.SendgridAdminEmailHandler',
“过滤器”:[“需要调试\u错误”],
“include_html”:True,
}
coredev/utils/logging.py
从django.utils.log导入AdminEmailHandler
从coredev.tasks导入sendgrid\u电子邮件
从设置导入管理员
类SendgridAdminEmailHandler(AdminEmailHandler):
def发送邮件(自我、主题、消息、*args、**kwargs):
对于管理员中的管理员:
尝试:
如果kwargs.get('html_message')不是None:
message_content=kwargs['html_message']
其他:
消息内容=消息
sendgrid_电子邮件(管理员[1],主题,消息内容,消息)
除:
通过
coredev/tasks.py(相关代码段)
导入sendgrid
从django.conf导入设置
def sendgrid_电子邮件(收件人、主题、正文、alt_正文、发件人电子邮件=设置。默认发件人电子邮件、模板id=设置。默认模板id):
sg=sendgrid.SendGridClient(settings.EMAIL\u HOST\u USER,settings.EMAIL\u HOST\u PASSWORD,raise\u errors=True)
message=sendgrid.Mail()
消息。添加过滤器('templates','enable','1')
消息。添加筛选器(“模板”、“模板id”、“模板id”)
消息。添加到(到)
message.set_from(从电子邮件)
消息。设置主题(主题)
message.set_html(正文)
如果替换体:
message.set_text(alt_body)
sg.发送(信息)
我已经浏览了Django文档(),以及StackOverflow和Google,但是到目前为止我还没有找到解决方案。我知道在所有应用程序都“准备好”之前不能导入模型,但我不相信我在这段代码中导入了任何模型,所以我不确定为什么会发生此错误


我的代码的哪一部分导致了这个问题?我需要采取什么步骤使我的定制日志处理程序与Django 1.9的AppRegistry兼容;特别是,这样我就不会再出现“应用程序尚未加载”错误了?

我也遇到了类似的问题。我可以通过在导入任何其他内容之前导入设置来解决此问题。另外,接受@Alasdair的建议

from django.conf import settings
from django.utils.log import AdminEmailHandler
from coredev.tasks import sendgrid_email

class SendgridAdminEmailHandler(AdminEmailHandler):
    def send_mail(self, subject, message, *args, **kwargs):
        for admin in settings.ADMINS:
            try:
                if kwargs.get('html_message') is not None:
                    message_content = kwargs['html_message']
                else:
                    message_content = message
                sendgrid_email(admin[1], subject, message_content, message)
            except:
                pass

设置导入管理员中的
是否正在尝试加载
设置.py
?最好使用django.conf导入设置中的
,然后使用
设置.ADMINS
。您还可以尝试将设置导入和
从coredev.tasks import sendgrid\u email
移动到
send\u mail
方法中,以防止循环导入。感谢您的回复,@Alasdair。我试过你的两个建议,但不幸的是,我仍然得到同样的错误。我有同样的问题