2017-01-12 14 views
1

私が取り組んでいるプロジェクトの要件の1つは、可能な限り多くの情報を得るために行われている処理量のために、サイトへの接続を記録することです。ページがユーザーに返送された後にこれを処理する。Cakephp 3のプロセスコードページ応答後

私は私のAppControllerのafterFilterに私のコードを実行しています現時点では:

public function afterFilter(Event $event){ 
    $log_request = new RequestsController; 
    $log_request->log_request();  
} 

私は私のAppControllerのafterRenderでこれを実行しようとしています:

public function afterRender(Event $event, $viewFile){ 
    $log_request = new RequestsController; 
    $log_request->log_request();  
} 

しかし、私はできないようですコードが実行されるようにするには、エラーがスローされているかどうかを調べる方法がわかりません。

誰かが私にこのようなことが行われているかどうか、またはこれを行うための並行方法を指摘できれば(それはリクエストの1秒以内に記録する必要があります)、私はそれを感謝します。

答えて

1

$log_request = new RequestsController;コントローラ内でコントローラをインスタンス化しません。 MVCベースのフレームワークを使用しているときに初めてthe MVC design patternを学びたいとします。そうしないと、メンテナンス不可能なひどいスパゲッティコードになります。私は基本的な理解を得るために、あなたはブログのチュートリアルを行うことをお勧めします。

誰かが、私はそれをお願い申し上げます(それはリクエストの秒以内にログインする必要があります)これが行われている例や、これを行うの並行法に向けて私を指すことができます。

この章を読む:そこから撮影CakePHP Logging:CakePHPの中

ログデータは簡単です - ログ()関数は、多くのCakePHPのクラスのための共通の祖先であるLogTrait、によって提供されます。コンテキストがCakePHPクラス(Controller、Component、View、...)の場合は、データを記録できます。 Log :: write()を直接使用することもできます。

、のAppControllerにログ形質を追加ログ()メソッドにリクエストを渡し、あなたがafterRender()またはあなたが本当に遅く、それを実行したい場合はどちらかの好むものは何でもこれらの要求をログに記録するログを設定、それを行います__destruct()にあります。

+0

私はこれ以上説明する必要があります!このデータはデータベースに記録されており、appControllerは認証を設定する場所なので、毎回実行する必要があります。私はこのコードをすぐ下に置くことにしました。データはコントローラのアクションから見ることができます。私はこれがここに属していないことに同意するが、それ以外はどこに置くべきか分からない。ロギングについてのあなたのリンクの後、私はこのデータを見るためのコントローラを持っていて、これをデータベースに書き込むためにロギング機能を使うべきですか?もしそうなら、ページがクライアントに送信された後、どうすればいいですか? –

+0

これは私の答えを変更しません。 DBログエンジンを介してデータベーステーブルにログを記録するだけです。私はCakePHPコアが変更されたかどうかはわかりませんが、これを試すことができます。https://github.com/burzum/cakephp-database-logドキュメントからDBログエンジンの実装です。ログ全体の章を読んでください。また、多くのリクエストを受け取った場合、このようなSQL DBへのロギングはパフォーマンス上の良い考えではありません。 Webサーバーのログが不十分なのはなぜですか? – burzum

+0

ありがとうございます:)私の唯一の未解決の質問は、クライアントに応答が送信された後にこれをどうやって行うのですか?私はPHPがマルチスレッドをサポートしておらず、クライアントがページを取得する前にこの処理を待つ必要はないと読んでいます。 (ケーキデバッグツールキットによると約0.6msかかる)。データベースの理由は、プロジェクトがこの情報の履歴から特定の条件に基づいて反応するためです。 –

関連する問題