Есть ли способ добавить подробные отчеты об удаленных сбоях в приложение Flex Air?

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

1 ответ

Решение

Глобальная обработка ошибок теперь поддерживается в 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

Другие вопросы по тегам