メインメニュー
XAMPP アレンジ
IED
WSL2
-
道具箱
リポジトリ編
フレームワーク編
公開ソフトウェア
メタ
リンク
- PHP ライブラリ
- PHP 言語
apricot:ext:access-logApricot アクセスログ
— y2sunlight 2020-05-06
関連記事
- Apricot 拡張
- Apricot アクセスログ
ミドルウェアの最初の例として、比較的簡単なアクセスログを作ってみましょう。アクセスログは一番外側のミドルウェアとして機能させます。
ミドルウェア
Apricotでは具体的なミドルウェアの実装はアプリ側の以下のフォルダに保存します。
apricot [プロジェクト] | ├── app [アプリケーション] | | | └── Middleware [ミドルウェア]
以下に、アクセスログの実装を示します。
/apricot/app/Middleware
- AccessLog.php
<?php namespace App\Middleware; use Core\Log; use Core\Input; use Core\Foundation\Response; use Core\Foundation\Invoker; use Core\Foundation\Middleware\Middleware; /** * アクセスログ - Middleware */ class AccessLog implements Middleware { /** * Process incoming requests and produces a response * {@inheritDoc} * @see \Core\Foundation\Middleware\Middleware::invoke() */ public function process(Invoker $next): Response { $message = session_id().' '.$_SERVER['REQUEST_METHOD'].' '.$_SERVER['REQUEST_URI']; // 前処理 $data = [ 'remote_addr' => $_SERVER['REMOTE_ADDR'], 'remote_user' => array_key_exists('REMOTE_USER', $_SERVER) ?$_SERVER['REMOTE_USER'] : 'Anonymous', 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'input' => json_encode(Input::all()), ]; Log::info("$message",$data); // 次のInvokerを呼び出す return $next->invoke(); } }
- Middleware インターフェースの process() メソッドを実装します。
- パイプラインの次の処理の前後でログを取ることもできますが、ここでは、前処理としてログ出力を行います。
- ロギングLog::info() メソッドでアクセスログを出力します。
- ログメッセージ
- セッションID (
session_id()
) - リクエストメソッド (
$_SERVER['REQUEST_METHOD']
) - リクエストURI (
$_SERVER['REQUEST_URI']
)
コンテキスト- リモートIPアドレス (
$_SERVER['REMOTE_ADDR']
) - リモートユーザ (
$_SERVER['REMOTE_USER']
) - ユーザエージェント (
$_SERVER['HTTP_USER_AGENT']
) - フォームデータ (
Input::all()
)
- 前処理の後、次の Invoker の invoke() メソッドを呼び出します。
アプリケーション設定の変更
上で作ったミドルウェア(AccessLog)をアプリケーションの設定ファイル(app.php)に追加します。
/apricot/config
- app.php
<?php return [ 'setup' =>[ ... ], 'middleware' =>[ \App\Middleware\AccessLog::class, /* Access log */ ], ... ];
- middlewareにクラス(
\App\Middleware\AccessLog::class
)を追加します
テスト実行
アクセスログのテストをしてみましょう。ブラウザ上で以下のURLにアクセスしてみて下さい。
http://localhost/ws2019/apricot/public/
以下のアクセスログが出力されていることを確認して下さい。
/apricot/var/logs
- apricot-2020-05-21.log
<code> [2020-05-21T15:29:20.941358+09:00] apricot.INFO: 2qqabsldseqabgv9sksejslaic GET /ws2019/apricot/public/home {"remote_addr":"::1","remote_user":"Anonymous","user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36","input":"[]"}
■ その他の画面を表示してアクセスログを確認して下さい。
■ 尚、ロギングの設定は以下の設定ファイルで行います。
/apricot/config/setting/monolog.setting.php
apricot/ext/access-log.txt · 最終更新: 2020/06/08 11:00 by tanaka
コメント