モデル層でロギング

Symfony2で採用されているmonologは、PSR-3 Logger Interface(Psr/Log/LoggerInterface)準拠だそうで。
このmonologを使って、モデル層のクラスでロギングしたいなと思いました。

use Psr\Log\LoggerInterface;

class FooBarModel
{
    protected $logger;

    public function __construct(LoggerInterface $logger = null)
    {
        $this->logger = $logger;
    }

    protected function loggingInfo($message)
    {
        if ($this->logger) {
            $this->logger->info($message);
        }
    }

    public function doSomething()
    {
        // do something...

        $this->loggingInfo('something done.');
    }
}

モデルクラスのコンストラクタにロガーを渡せばいいので、 モデルを利用する側でロガーのインスタンスを生成します。
という事で、サービスコンテナからロガーサービスを取得して、モデルに渡します。

$logger = $this->getContainer()->get('logger');

$model = new FooBarModel($logger);
$model->doSomething();

いい感じです。