新しいアプリケーションに zend フレームワーク 2 を使用しています。Rails などの同じログ システムが必要です。リクエストごとにログが必要です。Zend でこれを行うことは可能ですか?
2 に答える
何をログに記録するかによって異なります。単なるアクセス ログの場合は、Web サーバーのログを使用してみてください。Apache/nginx/IIS などからのログは、ZF2 アプリで達成するよりも優れたパフォーマンスを発揮します。
ZF2 アプリケーション内にログインする必要がある場合は、2 つの選択肢があります。最初のオプションはbootstrap
です。これは、使用できる最も初期のオプションの 1 つであるため、おそらく最適です。route
ただし、またはを見ることもできますdispatch
。これら 2 つのイベントは、アプリケーションの「実行」段階で呼び出されます。これらのイベントを使用すると、たとえばルートの一致が利用できるため、リクエストがコントローラーと一致したかどうかがわかります (一致しない場合は 404 です)。
いくつかの例。キーのServiceManager
下にロガーが構成されていると仮定しましょう。logger
次に、次の場所にログインしますbootstrap
。
namespace Application;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$sm = $app->getServiceManager();
$logger = $sm->get('logger');
$logger->debug('Log here!');
}
}
または、たとえば を待つ場合は、イベントroute
のリスナーをアタッチします。route
namespace Application;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\RouteMatch;
class Module
{
public function onBootstrap($e)
{
$app = $e->getApplication();
$em = $app->getEventManager();
$sm = $app->getServiceManager();
$logger = $sm->get('logger');
$em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($logger) {
$match = $e->getRouteMatch();
// No route, this is a 404
if (!$match instanceof RouteMatch) {
return;
}
$logger->debug(sprintf(
'Route event with route %s',
$match->getMatchedRouteName()
));
});
}
}
dispatch
のイベントにリスナーをアタッチできるようですZend\Mvc\Application
。
参考までに、Rob Allen がZF2 イベントの便利なリストを作成しました。