代码之家  ›  专栏  ›  技术社区  ›  keyboardsamurai

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

  •  2
  • keyboardsamurai  · 技术社区  · 14 年前

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Community prosti    7 年前

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

    Google App Engine Logging feature

    推荐文章