GAE Python - Ereporter不发送电子邮件

时间:2014-02-14 12:29:22

标签: python google-app-engine cron

我想使用电子报告程序向我发送每日电子邮件,其中包含我的应用中的所有例外情况。为此,我使用以下代码:

import webapp2, logging
from google.appengine.ext import ereporter

class SomeJob(webapp2.RequestHandler):
   def get(self):
     try:
        #some job
     except:
        logging.exception('my text')
        ereporter.register_logger()

我的app.yaml有以下参考(Python2.7):

- url: /_ereporter.*
  script: google.appengine.ext.ereporter.report_generator.application
  login: admin

我的cron.yaml有以下内容:

- description: Daily exception report
  url: /_ereporter?sender=email@mydomain.com&delete=false&to=myown@email.com
  schedule: every day 04:30

cron作业没有错误,它只是不发送电子邮件。我注意到的是,当我查看App Dashboard并转到Log时,记录的异常有以下文字:

  

我的文字
  无

我不确定是什么导致添加“无”,但我怀疑这可能表明我没有收到每日报告的原因。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我猜你的问题是你在记录数据后注册了记录器。

ereporter article中,它建议在全球范围内注册记录器:

import logging
from google.appengine.ext import ereporter

ereporter.register_logger()

答案 1 :(得分:1)

正如Samuel所说,您必须在抛出异常之前注册记录器。最好的地方是你的main.py.但是,一旦你这样做,你应该看到你对logging.exception()的调用结果。 ereporter将向您发送所有未处理的异常所有异常,您在except:子句中调用logging.exception()。

与ereporter的一个警告是它默认只发送昨天的例外。为了让它今天发送给你,例外情况是手动调用并提供今天的日期,例如,

http://your-app.appspot.com/_ereporter?sender=admin@yourdomain.com&date=2014-05-28

您也可以编写自己的cron处理程序来包装_ereporter并以编程方式提供今天的日期,如下所示:

self.redirect("/_ereporter ... &date=%s" % datetime.datetime.now().strftime("%Y-%m-%d"))

我打算这样做,这样我就可以得到每小时的异常报告。

H / T:https://groups.google.com/forum/#!searchin/google-appengine/ereporter/google-appengine/G99VGhs5cls/bD1UXDEnQqcJ