А Вы ведёте лог, чтобы знать все узкие места вашего приложения? Ведь если во flash-е произойдёт ошибка во время исполнения в браузере, то никак явно он этого не отобразит.
Для того, чтобы быть спокойным и суметь отловить все баги, нужно делать своё оповещение об ошибках и флагах мест выполнения кода. И не просто trace(), а полноценное оповещение, которое будет видно и в браузере и локально.
В данной статье я привожу код своей нароботки в области логирования с возможностью отображения лого в графическом виде и в консоль браузера.
Моя реализация лога представляет всего 1 класс и создана максимально простой, чтобы на её понимание уходило минимум времени.
Лог-менеджер способен отображать сообщения в самом приложении(специальная графическая консоль), в консоли браузера, и в Output FlashDevelop-а средствами обычного trace() при локальном запуске.
Не буду ходить вокруг, сразу разберу пример. В следующем примере 3 понятных кнопки:
Понажимайте их и вы увидете лог-менеджер в действии.
Например, в FireFox-е в консоли fireBug-а это выглядит так:
А в нативной консоли chrome(Дополнительные инструменты -> консоль JavaScript) так:
А вот и сам код примера:
package { import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import monax.LogMng; /** * ... * @author Monax */ [Frame(factoryClass="Preloader")] public class Main extends Sprite { private var _logMng: LogMng = LogMng.getInstance(); private var _menuDummy: Sprite; // контейнер для ГУИ private var _logDummy: Sprite; // контейнер для отображения лога public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); _menuDummy = new Sprite(); addChild(_menuDummy); _logDummy = new Sprite(); addChild(_logDummy); // создаём меню var menu: MainMenu_mc = new MainMenu_mc(); var btn: SimpleButton = menu.btnShowHide; btn.addEventListener(MouseEvent.CLICK, onShowHideClick); var btn: SimpleButton = menu.btnLog1; btn.addEventListener(MouseEvent.CLICK, onLog1Click); var btn: SimpleButton = menu.btnLog2; btn.addEventListener(MouseEvent.CLICK, onLog2Click); _menuDummy.addChild(menu); // инициализируем лог-манагер _logMng.init(stage, _logDummy); // можно установить флаг отображения в консоль браузера _logMng.consoleOutput = true; // можно указать высоту секции лога в приложении в px _logMng.logHeight = 140; addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onShowHideClick(e:MouseEvent):void { // показываем или скрываем лог в приложении _logMng.visible = !_logMng.visible; } private function onLog1Click(e:MouseEvent):void { _logMng.doLog("это лог-запись обычного типа"); _logMng.doLog("это лог-запись DEBUG типа", LogMng.DEBUG); } private function onLog2Click(e:MouseEvent):void { _logMng.doLog("это лог-запись WARNING типа", LogMng.WARNING); _logMng.doLog("это лог-запись ERROR типа", LogMng.ERROR); } private function onEnterFrame(e:Event):void { // необходимо периодически вызывать метод update _logMng.update(); } } }