SOHOゆいちのサイト
Zend FrameworkのMVCではいくつかの拡張方法が提供されています。今回はプラグインで、アクセスログを記録する方法を記載します。
プラグインでDispatchが終了した際に、ログを記録します。
実際の実装はBsheの以下のクラスを参照ください(ダウンロードはこちら)
以下のようなプラグインを用意します。
class Bshe_Specializer_Controller_Plugin_Accesslog extends Zend_Controller_Plugin_Abstract
{
/**
* ログクラス
*/
protected $logger = null;/**
* ログクラスセット
*
* @param $logger
* @return unknown_type
*/
public function setLogger($logger)
{
$this->logger = $logger;
}public function __construct($accessLogger)
{
$this->setLogger($accessLogger);
}/**
* アクセスログセットプラグイン
*
* ・URL
* ・セッションのUID
* を淡々とログに保存する
*
*
* @param $request
* @return unknown_type
*/
public function postDispatch($request)
{
try {
$pathInfo = $request->getPathInfo();
$this->logger->logWithFileAndParams($message, Zend_Log::INFO, array(‘pathinfo’ => $pathInfo));} catch (Exception $e) {
throw $e;
}
}
}
上記のpostDispatchメソッドは、Zend FrameworkのコントローラーがDispatch処理(一通りの処理)を終えた際に呼び出すメソッドです。
コンストラクタでログを記録するログクラスをセットするようになっており、中身は単純で、リクエストのパス情報をログへ記録するだけのものです。
上記のプラグインを用意したらindex.phpで、コントローラーフロントにセットして完了です。
$accessLogger = new Bshe_Log();
$accessWriter = new Bshe_Log_Writer_Dailystream(Bshe_Controller_Init::getMainPath() . ‘/logs’, ‘AccessLog_’);
$accessLogger->addWriter($accessWriter);
$front->registerPlugin(new Bshe_Specializer_Controller_Plugin_Accesslog($accessLogger));
これをindex.phpの中にセットするだけで、以下のようにログが保存されます。(Bshe_LogクラスはBsheで独自に拡張したクラスです)
2009-05-18T23:09:37+09:00 INFO (6): nologin: a0g5bqm3ljve0p1fdcagv8srv1: /home/hogehoge/library/Bshe/Specializer/Controller/Plugin/Accesslog.php(64)::postDispatch: pathinfo => /:
2009-05-18T23:09:38+09:00 INFO (6): nologin: nosession: /home/hogehoge/library/Bshe/Specializer/Controller/Plugin/Accesslog.php(64)::postDispatch: pathinfo => /_bshe/cms/image/images/index.html/test2/2009-04-16-
00-24-03.jpg:
www.bshe.org (created by itassist.info)