Ground Sunlight

Windowsで作る - PHPプログラミングの開発環境

ユーザ用ツール

サイト用ツール


サイドバー

メインメニュー

XAMPP アレンジ

IED

WSL2

道具箱

リポジトリ編

フレームワーク編

公開ソフトウェア

メタ
リンク


このページへのアクセス
今日: 2 / 昨日: 1
総計: 779

apricot:ext:access-log

Apricot アクセスログ

y2sunlight 2020-05-06

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


コメント

コメントを入力. Wiki文法が有効です:
 
apricot/ext/access-log.txt · 最終更新: 2020/06/08 11:00 by tanaka