Firebugのコンソール出力にログデータを出力する。
まずは、コード
package com.taktod.library.log {
import flash.external.ExternalInterface;
import mx.core.mx_internal;
import mx.logging.LogEvent;
import mx.logging.LogEventLevel;
import mx.logging.targets.LineFormattedTarget;
use namespace mx_internal;
/**
* FireFoxのコンソール出力するロガーターゲット
* @author taktod
* http://iamjosh.wordpress.com/2007/12/21/flex-in-application-logging/
*/
public class ConsoleTarget extends LineFormattedTarget{
/**
* コンストラクター
*/
public function ConsoleTarget(level:int = LogEventLevel.ERROR) {
super();
this.level = level;
}
/**
* ログ動作イベント
*/
override public function logEvent(event:LogEvent):void {
switch(event.level) {
case LogEventLevel.FATAL:
event.message = "FATAL:" + event.message;
break;
case LogEventLevel.ERROR:
event.message = "ERROR:" + event.message;
break;
case LogEventLevel.INFO:
event.message = "INFO:" + event.message;
break;
case LogEventLevel.WARN:
event.message = "WARN:" + event.message;
break;
case LogEventLevel.DEBUG:
event.message = "DEBUG:" + event.message;
break;
default:
break;
}
super.logEvent(event);
}
/**
* ログ書き込み動作
*/
override mx_internal function internalLog(message:String):void {
ExternalInterface.call("console.log", message);
}
}
}
イベントに割り込んで出力の部分にも割り込みをいれました。
ソースコード上の行数とかもいれたかったのですが、DebugPlayerでないと動作しないようなので、今回は見送りました。
実装するとしたら、Logクラスを継承したクラスを作成して、debugやinfoにError→stacktrace情報取得をいれればできるかなと思います。
上記のコードの使い方は
var log:ILogger
= Log.getLogger
("com.taktod"); Log.addTarget
(new ConsoleTarget
(LogEventLevel
.INFO
));
こんな感じです。
最終更新:2011年01月01日 21:10