FlexのログをFirebugで出力する

しかだよ。
Flexのログはconsoleにしかでないから、本番サーバーに配置したときにログが見れないから不便だよね。
ググったらFirebugにログを出力するクラスがありました。

Danny Patterson » Firebug Target for Flex Logging Framework

<mx:Script>
<![CDATA[
import mx.logging.ILogger;
import mx.logging.Log;
import mx.logging.LogEventLevel;
import com.dannypatterson.logging.FirebugTarget;

//パッケージ付きのファイル名
//どこでエラーが出たかわかりやすくなります。
private static var log:ILogger = Log.getLogger("jp.ne.hatena.d.re_shikajiro.firebugLogger");

private function init():void{
	initLog();
	
	//メソッド名を書いとくとエラーの箇所がわかりやすいです。
	log.debug("init() デバッグ用");
	log.info("init() 通常ログ");
	log.error("init() エラー用ログ");
	log.warn("init() 警告用ログ");
	log.fatal("init() 異常用ログ");
	log.log(LogEventLevel.DEBUG,"自由に選べるログ");
	log.debug("init() 引数も渡せます。:{0}", this.url);
}

private function initLog():void {
	var traceTarget:FirebugTarget = new FirebugTarget();
	traceTarget.includeCategory = true;
	traceTarget.includeDate = true;
	traceTarget.includeTime = true;
	traceTarget.includeLevel = true;
	traceTarget.level = LogEventLevel.ALL;
	traceTarget.filters = ["*"];
	Log.addTarget(traceTarget);
}
]]>
</mx:Script>

こんな感じでログが出ます。

トレースも欲しい

このクラスはこのままだと、コンソールに出てきません。ので拡張します。
TraceTarget.asに書いてるのをコピペします。

import mx.core.mx_internal;
use namespace mx_internal;
...
override mx_internal function internalLog(message:String):void {
trace(message);
}

これでコンソールにも、Firebugにもログが出るようになりました!

[SWF] Users:shikajiro:Documents:Flex Builder 3:firebug:bin-debug:firebug.swf - 655,261 バイト (圧縮後)
12/25/2009 19:56:06.961 [DEBUG] jp.ne.hatena.d.re_shikajiro.firebugLogger init() デバッグ
12/25/2009 19:56:06.965 [INFO] jp.ne.hatena.d.re_shikajiro.firebugLogger init() 通常ログ
12/25/2009 19:56:06.968 [ERROR] jp.ne.hatena.d.re_shikajiro.firebugLogger init() エラー用ログ
12/25/2009 19:56:06.971 [WARN] jp.ne.hatena.d.re_shikajiro.firebugLogger init() 警告用ログ
12/25/2009 19:56:06.972 [FATAL] jp.ne.hatena.d.re_shikajiro.firebugLogger init() 異常用ログ
12/25/2009 19:56:06.973 [DEBUG] jp.ne.hatena.d.re_shikajiro.firebugLogger 自由に選べるログ
12/25/2009 19:56:06.974 [DEBUG] jp.ne.hatena.d.re_shikajiro.firebugLogger init() 引数も渡せます。:file:///Users/shikajiro/Documents/Flex Builder 3/firebug/bin-debug/firebug.swf