0

新しいアプリケーションに zend フレームワーク 2 を使用しています。Rails などの同じログ システムが必要です。リクエストごとにログが必要です。Zend でこれを行うことは可能ですか?

4

2 に答える 2

5

をログに記録するかによって異なります。単なるアクセス ログの場合は、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()
      ));
    });
  }
}
于 2013-01-16T09:33:45.830 に答える
2

dispatchのイベントにリスナーをアタッチできるようですZend\Mvc\Application

参考までに、Rob Allen がZF2 イベントの便利なリストを作成しました。

于 2013-01-16T06:50:23.967 に答える