NIKE AIRの制作で有名なBIGSPACESIPの提供しているOutクラスについて書きかけのエントリーが放置してあったのでいまさらながら公開してみます。


これはアラガのオレ様Loggerと似たようなtrace的なクラスです。

特徴としては、クラス名とメッセージをセットで出力できることと、レベル別に出力しわけること、レベルとクラス単位でフィルタリングできることです。

AS2版とAS3版があります。

使い方(AS2,AS3共通)

使い方は簡単で、debug, info, error, warning, status, fatalに対してメッセージを渡すだけです。出力レベルとクラス名、メッセージが出力(trace)されます。

import com.bigspaceship.utils.Out; Out.info( this, "message" ); Out.debug( this, "message" ); Out.error( this, "message" ); Out.fatal( this, "message" ); Out.status( this, "message" ); Out.warning( this, "message" );

また以下のように出力レベルを切り替えることができます。

Out.disableAllLevels(); Out.enableLevel(OUT_FATAL);

クラス単位でフィルタリングしたいときはsilence, unsilenceで切り替えます。

Out.silence(MyClass); Out.unsilence(MyClass);

AS2版を使うときの注意

AS2版は自力でクラスに_classnamする必要があるようです。

ただmAS2版はバグがあって、61行目、72行目のsilence周りのクラス名の取得がうまく動きません。typeofの比較対象を小文字の"string"に変更しておきましょう。

//オリジナル var c = (typeof($origin) == "String" ? $origin : $origin._classname); //修正版 var c = (typeof($origin) == "string" ? $origin : $origin._classname);

(AS3版も大文字の"String"が1箇所あるけど、どうなのかな…?)

応用編

タイムラインに書くときはクラス名とかないのでちょっと見づらいですが、タイムラインに_classname="_root"という感じでプロパティを宣言しておくと、出力時に見やすいです。

また、静的クラスの場合もthisがないのでデバッグ時に使いたいときは不便です。private static const _dummyclass = { _classname:"MyStaticClass"}; というようなクラス名を持ったダミーのオブジェクトを渡すと大変見やすくなると思います。(余計なメンバなのでデバッグおよびテストが終わったら消す方がいいかも知れませんが)。

またAS3版は出力の際にレベルごとに(ALL,INFO,ERROR,DEBUGなど)イベントをはいているようなので、フックして別のところに出力させることも可能なようです。(あくまでtraceの代用品なのでデバッグに絡めた機能に利用しましょう)

未検証の機能

AS2版のソースコードみてたら、どうやら下記のような構造のデバッグ用のMCを_rootにおいておくとそちらにも出力されるようです。試してませんがオンラインでTraceが見られないようなときは便利そうです。(負荷高そうですが)

//デバッグ用MCの構造
_root
└debug_mc
 └debug_txt

HTML5飯