Flash 10和AIR2现在支持全局错误处理。更多信息请点击此处:
http://help.adobe.com/en_US/air/reference/html/flash/events/UncaughtErrorEvent.html
使用这种功能捕获未捕获的异常;您可以将跟踪提交给专门为获取它们而设置的某些web服务。使用GoogleAppEngine非常适合这个目的,因为它已经有了一个日志功能,可以从调用应用程序的客户端获取各种元数据。此外,如果你的日志由于某种原因变得巨大,至少你不必担心存储它们。谷歌为你做到了:)
我已经建立了如下所述的服务(尽管它有一些缺陷,特别是任何人都可以调用它并添加“跟踪”,但您可以添加一些共享秘密并通过HTTPS发布,以获得一些微小的安全措施)。
应用程序引擎日志记录服务
#!/usr/bin/env python
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
class MainHandler(webapp.RequestHandler):
def post(self):
import logging
if self.request.get('trace'):
logging.error(self.request.get('trace')) #Adds a row to GAE:s own logs :)
self.response.out.write('trace logged')
else:
set_status(501)
def get(self):
""" Kill this function when done testing """
test_form = """
<form action="/" method="POST">
<textarea name="trace"></textarea>
<input type="submit">
</form>"""
self.response.out.write(test_form)
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=False)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
private function postToLogger(event:MouseEvent):void
{
var service:HTTPService = new HTTPService();
var parameters:Object = {'trace': "omg something went wrong"};
service.url = "https://YOURSUPERSIMPLELOGGINGSERVICE.APPSPOT.COM";
service.method = HTTPRequestMessage.POST_METHOD;
service.resultFormat = HTTPService.RESULT_FORMAT_E4X;
service.addEventListener("result", onSuccess);
service.addEventListener("fault", onError);
service.send(parameters);
}
最后,这是它在日志、大量元数据以及你在AIR应用程序中捕获的跟踪中的外观。