CFMLというのは、Javaプラットフォーム上で動作するライトウェイト言語としてもっと使われてもよさそうなのに、レガシーなイメージから敬遠されてしまっている可哀そうなやつなので、CFMLのモダンな開発スタイルについて、ちょっとづつ調べたものを残してみようかなと思ってます。
CFMLが使えるオープンソースのアプリケーションサーバーであるLuceeを、本当は最初に紹介すべきと思いつつ、まずは今思うところあって調査中の「LogBox」から書いてみることに。
##LogBoxとはなんぞや
そもそもCFMLすら知らない人がほとんどってのは置いといて、LogBoxはCFMLの使い手向けに作られたlog4jライクなログライブラリです。これColdboxフレームワークを作っているOrtus Solutionsが作っているので、Coldbox専用のフレームワークだと思い込んでいたけどそうではなく、CFMLのどんな環境にも簡単に差し込んで使う事ができます。
##LogBoxのメリット
基本的なメリットはlog4jと同じで、ログレベルを指定するとそのレベル以下のログが自動的に出力されなくなるとか、クラスごとにロギングの設定を簡単に制御できるとか、ログ出力先をファイルにしたり、DBにしたりといったコントロールを簡単に行えるとか、そのあたりの地味に面倒なローレベルの処理に関して、車輪の再発明を行わなくて良い、という事になります。
LogBoxのインストール
Commandboxを使っている場合は、Commandboxから下記のコマンドを打つだけで、Forgeboxというリポジトリから自動的にファイルをダウンロードしてくれます。
box install logbox
後はダウンロードされたフォルダに「LogBox」という名前でマッピングを通すだけで使えます。
例えばデータソース「myDS」にログを保存したい場合は、次のようにconfigオブジェクトを作って、appenderでLoggerの各種設定値を追加します。その上でconfigオブジェクトを渡してLogBoxのインスタンスを生成。
// ログ設定
config = new logbox.system.logging.config.LogBoxConfig();
config.appender(
name="MyCoolLogger",
class="logbox.system.logging.appenders.DBAppender",
properties={
dsn="myDS",
table="logs",
autocreate=true,
textDBType="text",
async=true
}
);
// Logboxインスタンス生成
logBox = new logbox.system.logging.LogBox(config);
後は名前指定でLoggerを呼び出し、info()やdebug()等のメソッドでログを記録することができます。
// Loggerの呼び出し
log = logBox.getLogger('MyCoolLogger');
// ログ記録
log.info('My first logger!');`
実行結果
Appenderの種類は一般的なFileAppenderとか、EmailAppenderなるものもありますが、Appenderを自作することもできるようなので、ある時急にどこかのクラウドサービスにログを保存したくなった時にも、Appenderを追加して切り替えるだけで対応できるように設計できそうです。
もう少し細かいところを掘っていこうと思いますが、CFMLで使える貴重なログライブラリなので、積極的に活用していくべきですね。