Удобный способ уведомления об ошибках
Сентябрь 11th, 2008Как получать сообщения по электронной почте, когда в приложении возникает исключение?
Ниже приведен пример кода, который позволяет реализовать такую функцию, причем ведет учет сообщений по ранее произошедшим событиям, не позволяя заваливать бесполезным мусором ящик разработчика:
import sys, logging, traceback from google.appengine.ext import webapp from google.appengine.api import memcache class BaseRequestHandler(webapp.RequestHandler): def handle_exception(self, exception, debug_mode): exception_name = sys.exc_info()[0].__name__ exception_details = str(sys.exc_info()[1]) exception_traceback = ''.join(traceback.format_exception(*sys.exc_info())) logging.error(exception_traceback) exception_expiration = 3600 # в секундах (задаем максимум 1 сообщение в час по исключению) mail_admin = "yourmail@yourdomain" # указывается администратор приложения sitename = "yourapplication" throttle_name = u'исключение-'+exception_name throttle = memcache.get(throttle_name) if throttle is None: memcache.add(throttle_name, 1, exception_expiration) subject = u'[%s] исключение [%s: %s]' % (sitename, exception_name, exception_details) mail.send_mail_to_admins(sender=mail_admin, subject=subject, body=exception_traceback) template_values = {} if users.is_current_user_admin(): template_values['traceback'] = exception_traceback self.response.out.write(template.render('error.html', template_values)) class MyHandler(BaseRequestHandler): def get(self): ...