Skip to main content
 首页 » 编程设计

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

2025年01月19日24kenshinobiy

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

请您参考如下方法:

Flash 10 和 AIR2 现在支持全局错误处理。更多信息:http://help.adobe.com/en_US/air/reference/html/flash/events/UncaughtErrorEvent.html

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

我已经设置了如下所述的服务(假设它有一些缺陷,特别是任何人都可以调用它并添加“跟踪”,但您可以添加一些共享 key 并通过 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 应用程序,其中包含这个小测试功能,它只是 POST:ed 指定参数“trace”的应用程序引擎服务。

发布到日志服务 (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