我想使用电子报告程序向我发送每日电子邮件,其中包含我的应用中的所有例外情况。为此,我使用以下代码:
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时,记录的异常有以下文字:
我的文字
无
我不确定是什么导致添加“无”,但我怀疑这可能表明我没有收到每日报告的原因。有什么想法吗?
答案 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"))
我打算这样做,这样我就可以得到每小时的异常报告。