2014-02-14 47 views
1

我想使用ereporter向我發送每日電子郵件,其中包含來自我的應用的所有例外。要做到這一點,我用下面的代碼:GAE Python - Ereporter不發送電子郵件

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: /[email protected]&delete=false&[email protected] 
    schedule: every day 04:30 

cron作業沒有錯誤,它只是不發送電子郵件。我已經注意到了,就是當我看在App儀表盤和去登錄,登錄異常有以下文字:

我的文字

我不知道是什麼原因造成「無」加入,但我懷疑這可能表明我沒有收到每日報告。有任何想法嗎?

+0

也許添加'除了例外爲e:'然後REPR誤差更具體? –

+0

嗯,是的,我有一些工作,我註冊了整個Traceback結果。不過,我在這裏使用了一個簡單的字符串來表明即使這不起作用。 – Vincent

回答

2

我猜想問題是你登錄數據後註冊記錄器。

ereporter article它建議,登記在全球層面上的記錄器:

import logging 
from google.appengine.ext import ereporter 

ereporter.register_logger() 
+0

感謝您的輸入Samuel。這確實解決了「無」問題。但是電子郵件仍未被髮送。 – Vincent

+0

原來,只是記錄一個異常不會觸發ereporter。當最近發生實際異常時,我確實收到一封電子郵件。 – Vincent

1

撒母耳指出,必須在拋出異常之前註冊的記錄。最好的地方在於你的main.py。但是,一旦你這樣做了,你應該看到你對logging.exception()的調用結果。 ereporter會向您發送所有未處理的異常您在except:子句中調用logging.exception()的所有異常。

ereporter的一個警告是,它默認只發送昨天的例外。爲了得到它送你今天的例外手動調用它,並提供當天的日期,如

http://your-app.appspot.com/[email protected]&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