Простой класс на ActionScript 3 для логирования
Для ActionScript 3 существует несколько фреймворков для логирования. К сожалению, один из них требует подключения компонентов от Flex'а, другие слишком велики для небольших проектов. Есть так же удобные решения для AIR.
Для небольших проектов достаточно, в принципе, вывода отладочных сообщений с помощью trace(), эти сообщения можно посмотреть на живом сайте с помощью отладочной версии Flash-плеера и/или с помощью Vizzy.
Небольшой класс-обёртка над trace() умеет следующее:
- Вывод сообщений с разными статусами (отображаются первым символом)
- Встроенный
sprintf() - Отображение результата вызова
getTimer()(для быстрого профилирования) - Возможность отображения вложенных полей объектов (т.н. deep trace)
Внутри используется реализация sprintf() от Manish Jethani
package crisp.log
{
import va.routine.sprintf.*;
import flash.utils.*;
public class Logger
{
private static const INFO_MARK:String = '-';
private static const WARN_MARK:String = '*';
private static const ERROR_MARK:String = '!';
public static function info(message:String, ... args):void
{
_message(message, args, INFO_MARK);
}
public static function warn(message:String, ... args):void
{
_message(message, args, WARN_MARK);
}
public static function error(message:String, ... args):void
{
_message(message, args, ERROR_MARK);
}
/*
http://www.actionscript.org/forums/showthread.php3?t=158117
*/
public static function objectDeepTrace( obj : *, level : int = 0 ) : void{
var tabs : String = "";
for ( var i : int = 0 ; i < level ; i++, tabs += "\t" );
for ( var prop : String in obj ){
trace( tabs + "[" + prop + "] -> " + obj[ prop ] );
objectDeepTrace( obj[ prop ], level + 1 );
}
}
/*
http://www.kirupa.com/forum/showthread.php?p=1923917
*/
public static function objectTrace(object:*)
{
var item:String;
for (var key:String in object)
{
item = '[' + key + ']' + " -> ";
if (object[key] instanceof Array)
{
item += 'Array(' + object[key].length + ')';
}
else
{
item += object[key];
}
trace(item)
}
}
private static function _message(message:String, args:Array, mark:String):void
{
var ms:String = sprintf('[%10.0f]', getTimer());
var message:String = vsprintf(message, args);
trace(sprintf("%s %s %s", mark, ms, message));
}
}
}
