エンジニアブログ

エンジニアブログ
MT技術情報

カスタムログについて

ぴろり上西 2008年02月25日

 こんにちは,上西です。今日のネタはかなり地味(?)かも知れません。Movable Type でのログ出力について。

 プラグインやシステムを開発していると,プログラムの動作を MovableType のシステム ログに書き出すことがあると思います。普段は余程複雑なログ出力が要求されない限り,MT->log を使うだけで十分です。
 ところで MovalbeType には Custom Log という仕組みがあって,ベンダ定義の Log Object を自由に追加することができるようになっています。これを使うとベンダが自由に定義した書式でログに書き出したり,そのログだけをフィルタすることもできるようになります。地味な機能の割りには実はかなり便利です。

 カスタム ログについては,一応,MT::Log オブジェクトのリファレンスにその記述があります。ただ,詳細なところがかなり端折って書いてあるので,とりあえず自分でカスタム ログ オブジェクトを作って動かしてみるとよく判るのではないでしょうか。
 カスタム ログ オブジェクトはプラグインの形で提供すると簡単です。プラグインを書く要領で以下のようなファイルを作り,例によって plugins ディレクトリ以下にコピーしてやります。

 カスタム ログ オブジェクトは /plugins/MyCustomLog/lib/MyCustomLog.pm に定義されていて,以下のように MT::Log のサブクラスとして定義してやります。今回,実験用に以下の非常に簡単なものを用意しました。

 以上で準備は完了です。管理画面からログを確認すると以下のようになっているのが確認できると思います。MyCustomLog オブジェクトでオーバーライドした各メソッドと画面上での表示の対応は以下の通りになります。

MyCustomLog.gif

 フィルタの設定から "My Custom Log Label" を選択すると,MyCustomLog によって記録されたログだけが抽出されて表示されます。
 ところで,ここが追試不足でイマイチ不明なのですが,MT::Log->add_class するときの key と value は同じ文字列にしておかないとフィルタが上手く動作しないようなんですね。うーん。

 MT と他システムと連携して機能するサイトなどでも,その動作ログを MT に集約すると管理がし易くて便利です。フィードも生成されますし再利用性が大きく増します。ただ,普通に system レベルのログに吐いてしまうと,他のログに混ざって検索が大変だったりします。そんな時に活躍してくれるカスタム ログは縁の下の力持ち的な存在と言えるでしょう。