Лог-менеджер для flash-проектов

А Вы ведёте лог, чтобы знать все узкие места вашего приложения? Ведь если во flash-е произойдёт ошибка во время исполнения в браузере, то никак явно он этого не отобразит.

Для того, чтобы быть спокойным и суметь отловить все баги, нужно делать своё оповещение об ошибках и флагах мест выполнения кода. И не просто trace(), а полноценное оповещение, которое будет видно и в браузере и локально.

В данной статье я привожу код своей нароботки в области логирования с возможностью отображения лого в графическом виде и в консоль браузера.

Моя реализация лога представляет всего 1 класс и создана максимально простой, чтобы на её понимание уходило минимум времени.

Лог-менеджер способен отображать сообщения в самом приложении(специальная графическая консоль), в консоли браузера, и в Output FlashDevelop-а средствами обычного trace() при локальном запуске.

Не буду ходить вокруг, сразу разберу пример. В следующем примере 3 понятных кнопки:

Понажимайте их и вы увидете лог-менеджер в действии.

Например, в FireFox-е в консоли fireBug-а это выглядит так:

Отображение лога в браузере
Отображение лога в браузере

А в нативной консоли chrome(Дополнительные инструменты -> консоль JavaScript) так:

Отображение лога в браузере Chrome
Отображение лога в браузере Chrome

А вот и сам код примера:

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();
}
 
}
 
}