0

我希望能够使用 pylons.controllers.util 中的 abort 函数来显示 404、500 个错误页面,其中包含有关问题的信息,但同时让 abort 函数从 errormiddleware 向我发送异常电子邮件。

现在,我有这个:

try:
    do(this)
except:
    abort(500, 'Something went wrong!')

这将显示一个带有 500 标题和我的消息的页面,这很好。但我想要的是让标准异常电子邮件发送给我,即使我自己返回了 500 错误。

有没有办法做到这一点?我可以从那里以某种方式运行errormiddleware函数吗?任何想法表示赞赏。

4

3 回答 3

0

在你的 middleware.py 你应该有这个:

if asbool(full_stack):
    # Handle Python exceptions
    app = ErrorHandler(app, global_conf, **config['pylons.errorware'])

    # Display error documents for 401, 403, 404 status codes (and
    # 500 when debug is disabled)
    if asbool(config['debug']):
        app = StatusCodeRedirect(app)
    else:
        app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])

它处理你的错误。但是如果您想在发生错误时发送电子邮件,您可以编写您在代码的关键部分调用的辅助函数,它将错误的详细信息发送到您的电子邮件,或者您可以重写此中间件(ErrorHandler)。
ofc 您也可以在现有的 ErrorHandler 中添加该辅助函数调用,但我不推荐它(修改现有库不是好的编程)。

该辅助函数的代码:

import turbomail
def send_mail(body, author,subject, to):
    conf = {
            'mail.on': True,
            'mail.transport': 'smtp',
            'mail.smtp.server': 'smtp.DOMAIN.SMT:25',
        }

    turbomail.interface.start(conf)
    message = turbomail.Message(
            author = author,
            to = to,
            subject = subject,
            plain = body,
            encoding = "utf-8"
        )

    message.send()
    turbomail.interface.stop()

希望能帮助到你...

于 2011-07-04T07:06:35.630 回答
0

手动引发异常,即 raise(SomeMeaningfulException) 怎么样?这应该由errormiddleware自动处理。

于 2011-07-04T12:01:50.727 回答
0

Pylons 已经通过配置 .ini 文件中的 error_email_from 和 email_to 参数向电子邮件报告了非常好的错误。

例如:

[DEFAULT]
email_to = errore@mysite.com
error_email_from = error_robot@mysite.com

更新: 有两种方法可以实现您想要实现的目标:

  1. 定义您自己的错误映射器(正确的方式)。查看http://wiki.pylonshq.com/display/pylonsdocs/Error+Documents以获取代码示例。
  2. error.py使用控制器的 ' ' 方法发送电子邮件document(快速但笨拙的方式)。
于 2011-07-17T09:07:27.163 回答