Есть ли способ добавить подробные отчеты об удаленных сбоях в приложение 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.