【问题标题】:Receive django error debug report by email :通过电子邮件接收 django 错误调试报告:
【发布时间】:2020-04-07 12:29:44
【问题描述】:

这是我在 django 设置中的配置:

MAILER_LIST = ['toto@toto.com']

EMAIL_HOST = 'toto.smtp.com'

EMAIL_HOST_USER = 'toto@toto.com'

EMAIL_HOST_PASSWORD = 'tata'

EMAIL_PORT = 587

EMAIL_USE_TLS = True

DEFAULT_FROM_EMAIL = 'toto@toto.com'

LOGGING = {

    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'mail_admins': {
            'level': 'DEBUG',
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': [],
        }
    },
    'loggers': {
         'django.request': {
             'handlers': ['mail_admins'],
             'level': 'DEBUG',
             'propagate': True,
        },
    }

}

我尝试使用以下方法进行调试:

from django.core.mail import EmailMessage
email = EmailMessage('Hello', 'World', to=['toto@toto.com'])
email.send()

如果我把它放在我的设置中,我会收到测试电子邮件。

我想通过电子邮件收到这个错误报告(这只是一个例子,我在我的代码中添加了这个错误来测试邮件报告):

通过电子邮件获取调试日志我缺少什么?测试是发送邮件所以不是邮件配置问题...

我想通过电子邮件获取报告,并且仍然在 django 上显示调试页面。如果调试为真或不是,则获取电子邮件事件。

所以我在我的设置中设置了 DEBUG = True。

感谢和问候

【问题讨论】:

  • 我认为这个错误是不言自明的。您在分配之前已经引用了变量 tt。在错误之前的堆栈跟踪中,它将向您显示崩溃的确切文件和行。

标签: django python-3.x


【解决方案1】:

正如另一个答案中所说,如果您想使用 django 内置 AdminEmailHandler,那么您需要在您的 settings.py 中提供 ADMINSMANAGERS 而不是 MAILER_LIST。像这样:

ADMINS = ['toto@toto.com']  # better to use another mail than EMAIL_HOST_USER
MANAGERS = ADMINS

Django 的utils.log 有两个选项来处理您的DEBUG 值:RequireDebugFalseRequireDebugTrue

因此,如果您想在调试时向您的管理员(ADMINS 变量在settings.py)发送错误电子邮件,那么您可以使用类似的设置:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue'  # log while DEBUG=True
        }
    },
    'handlers': {
        'debug_mail_admins': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'filters': [require_debug_true],
        }
    },
    'loggers': {
         'django.request': {
             'handlers': ['debug_mail_admins'],
             'level': 'ERROR',
             'propagate': True,
        },
    }
}

更新:

您也可以使用logging.handlers.SMTPHandler。然后就可以写出类似这样的代码:https://code.djangoproject.com/ticket/15917

【讨论】:

  • @yevhenil M 我还想在网站上看到调试报告
  • @user462794 这就是我使用require_debug_true 的原因 - 此选项允许使用调试报告网页进行日志记录。如果这不起作用,那么您需要基于django.utils.log.AdminEmailHandler 或更好的logging.handlers.SMTPHandler 编写自定义处理程序。
  • 但不要在生产中使用DEBUG=True 设置。这可能会导致敏感数据泄露并损害网站安全性。
【解决方案2】:

Django 为你处理这个,你可以添加

MANAGERS = ['mail@mail.com']

或者考虑集成哨兵以获得更强大的错误报告,哨兵也是免费的

【讨论】:

    【解决方案3】:

    你应该使用ADMINS:

    ADMINS = ['notifications@example.com']

    收到代码错误通知的所有人的列表。当 DEBUG=False 并且在 LOGGING 中配置了 AdminEmailHandler(默认完成)时,Django 会通过电子邮件向这些人发送请求/响应周期中引发的异常的详细信息。

    更多信息here

    【讨论】:

      【解决方案4】:

      除了在其他答案中已经说过的,别忘了在你的设置中设置SERVER_EMAIL (docs)。

      错误消息来自的电子邮件地址;它类似于DEFAULT_FROM_EMAIL,但SERVER_EMAIL 仅用于错误消息。默认值为 'root@localhost',如果您使用像 sendgrid 这样的提供商,您的电子邮件将被阻止。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-27
        • 1970-01-01
        • 2023-04-05
        • 1970-01-01
        • 2012-07-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多