symfonyのタスクからログファイルにログを記録する

TwitterにてTakiTakeさんがつぶやいていたので、気になって調べてみました。


いろいろググッたところ、次のエントリが見つかりました。


エントリの内容を簡単にまとめると以下のような感じです。

  • symfonyのtaskはsfTaskの派生クラスで、sfTask::log($messages)メソッドなどを利用できる。
  • sfTask::logメソッドは、command.logイベントを発生させる。
  • したがって、タスク側でcommand.logイベントをファイルに記録するsfFileLoggerオブジェクトを作成して、このイベントにconnectすればOK

というわけで、以下のようなコードが示されています。

<?php
    $file_logger = new sfFileLogger($this->dispatcher, array(
        'file' => $this->configuration->getRootDir().'/log/task.log'
    ));
    $this->dispatcher->connect('command.log', array($file_logger,'listenToLogEvent'));