有没有办法向Flex Air应用程序添加详细的远程崩溃报告?

时间:2010-03-01 21:18:00

标签: flex air reporting crash

我将很快发布我的Air / Flex应用程序,但我很确定在Air可用的各种平台上可能会出现一些错误。所以我想知道是否有办法实现一种机制,每次应用程序崩溃时都会向远程服务器发送错误报告,记录错误发生的位置?通过这种方式,我可能会发现错误,否则会被忽视。

1 个答案:

答案 0 :(得分:2)

Flash 10和AIR2现在支持全局错误处理。有关详细信息,请访问:http://help.adobe.com/en_US/air/reference/html/flash/events/UncaughtErrorEvent.html

使用这种功能捕获未捕获的异常;您可以将跟踪提交到某些专门设置的Web服务以获取它们。使用Google App Engine非常适合此用途,因为它已经具有记录功能,可以从调用应用程序的客户端获取各种元数据。此外,如果您的日志由于某种原因变得很大 - 至少您不必担心存储它们。 Google会为您做到这一点:)

我已经设置了如下所述的服务(授予它有一些缺陷,特别是任何人都可以调用它并添加“跟踪”,但你可以添加一些共享秘密并通过HTTPS发布以获得一些小的措施安全性)。

App Engine日志记录服务

#!/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()

我写了一个包含这个小测试函数的AIR-app,只需POST:使用指定的参数“trace”编辑app引擎服务。

发布到日志记录服务(ActionScript)

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应用程序中捕获的跟踪的外观。

Google App Engine Logging feature