Есть ли способ добавить подробные отчеты об удаленных сбоях в приложение Flex Air? - PullRequest
2 голосов
/ 02 марта 2010

Я скоро опубликую свое приложение Air / Flex, но я уверен, что есть пара ошибок, которые могут появиться на различных платформах, для которых доступен Air. Поэтому мне было интересно, есть ли способ реализовать механизм, который бы отправлял отчет об ошибке, регистрируя, где произошла ошибка, на удаленный сервер каждый раз, когда происходит сбой приложения? Таким образом, я мог бы ловить ошибки, которые иначе остались бы незамеченными.

1 Ответ

2 голосов
/ 06 марта 2010

Глобальная обработка ошибок теперь поддерживается во Flash 10 и AIR2. Подробнее об этом здесь: http://help.adobe.com/en_US/air/reference/html/flash/events/UncaughtErrorEvent.html

Использование такого рода функциональности для отлова необработанных исключений; Вы можете отправить трассировку в какой-либо веб-сервис, настроенный специально для их получения. Использование 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-приложение, содержащее эту маленькую тестовую функцию, которая просто POST: редактировала службу движка приложения с указанным параметром «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

...