どうも時々ActionScriptとも戯れているプログラマのaragaです

僕はFlexBuilderを使って開発をするのですが、FlexSDKにはFlashと違ってビルド時にTraceアクションを省略するオプションがありません。
そこで、Flexで開発するときは、trace() は絶対に使わないでオレ様Loggerを使用するというのを僕の中のルールにしています。

このオレ様LoggerがFlashPlayer10と戯れたり、AIRのアプリを作ったりするときにけっこう威力を発揮するなと最近思い始めたので、少しご紹介いたします。

特徴

  • エラーレベルによる出力の管理
    DEBUG(=0),INFO,WARNING,ERROR,FATAL(=4)
  • ObjectとArrayの視覚化
    ObjectとArrayを [key] => valueとして階層ごとにインデントを付けて視覚化できます
  • 出力方法をカスタマイズできる
    出力処理部分にStrategyパターンを使用しており、実装するインスタンスを用途に合わせて変更するだけで、多彩な出力ができます。
    (ILoggingを実装してput(string:String, level:int=0):voidを作るだけ)
  • 軽量
    出力関数に4行でたどり着くので軽いです。(エラーレベル判定、出力文字追加、出力)

使用方法

自分で実装するコードの可能な限り最初(ルートクラスのコンストラクタがベスト)に以下の設定をします

以下はINFOレベルでログとダンプをFireBugのコンソールに出力させる例です

import ken39arg.logging.Logger; // 設定 Logger.errorLevel=Logger.INFO; Logger.useVerdump=true; Logger.setLogging(new FirebugLogging()); // デバッグ var t:Object = { abs:123, ooo:"おおお", data:{ abc:"hoge", efg:["aiueo","kakikukeko",123] }, bool:true }; Logger.debug("a"); Logger.info("a"); Logger.warn("a"); Logger.error("a"); Logger.fatal("a"); Logger.putVardump(t, "test_data");

結果

設定パラメータ

  • Logger.errorLevel
    エラーレベルの設定です。
  • Logger.useVerdump
    ObjectとArrayのダンプができるので、この機能を有効にするか設定します。
  • Logger.setLogging(loggingOnj:ILogging);
    ILoggingを実装したオブジェクトのインスタンスを設定します。

最近気づいたのですが、var_dumpのスペルが違いますね。気になる人は直してください。

ILogging実装クラス

  • NullLogging
    何もしない
  • TraceLogging
    trace()関数の実行
  • FilePutLogging
    ローカルのファイルに出力(Air専用)
  • FirebugLoging
    FireBugのコンソールに出力
  • RemoteLogging
    ログをサーバーに転送(要サーバースクリプト)
  • PararelLogging
    ログ実装クラスを複数使用する(例えばAirアプリでFilePutLoggingとRemoteLoggingをレベルを変えて使用する等)

リリース時は,

Logger.errorLevel=99; Logger.useVerdump=false; Logger.setLogging(new NullLogging());

とすることで、何も出なくなります。

ちなみに、最近ThunderBoltをしったのですが、仕様感は全く同じようでしたので、僕は浮気すること無くオレ様Loggerを使い続けています。
皆さんにも、もし気に入っていただけるようでしたら、sparkprojectとかにコミットしようかと思います

ソース

logger.zip

HTML5飯