前置き
Monolog は、
アドオンの Chrome Logger にデータを転送するライブラリです。
PHP コードの途中で、変数の値をリアルタイムに確認できます。
# Chrome デバッグコンソールにデータを表示するには、
# Monolog と Chrome Logger の両方が必要です。
インストール
サンプル・プログラムでは、既にインストール済みです。
もし、新規にインストールする場合は、
1. コマンドプロンプトを起動
2. WEBアプリコードのルートに移動
3. composer require monolog/monolog
を実行すると、
\vendor\monolog フォルダ以下にインストールされます。
定義コード
サンプル・プログラムでは、既に対応済みです。
もし、新規に実装する場合は、
以下のコードを追加します。
// ライブラリの自動サーチ
require_once __DIR__ . '/../vendor/autoload.php'; // コードが \main フォルダにある前提
// Monolog を使用する宣言
use Monolog\Logger; // ログ出力
use Monolog\Handler\ChromePHPHandler; // 出力先を Chrome デバッグコンソールに
// ログ出力用のクラス設定
$log = new Logger('debug'); // 'debug' は、アプリ内で複数ロガーを使うときに識別するための名前。任意の文字列。
$log->pushHandler(new ChromePHPHandler(Logger::DEBUG)); // (後述:ログレベル)
ログレベル
ログには、以下のレベルが用意されています。
// レベル // 使い分け (一例)
// Logger::DEBUG // 開発者向けのデバッグ情報 (重要度:最低)
// Logger::INFO // ユーザー、SQL のログなど
// Logger::NOTICE // 通常とは異なるが問題ではない
// Logger::WARNING // エラーではない例外的な出来事
// Logger::ERROR // 実行時のエラー
// Logger::CRITICAL // 危険な状況
// Logger::ALERT // 直ちに対応が必要
// Logger::EMERGENCY // 緊急警報 (重要度:最高)
# 重要度は、DEBUG が最低で、EMERGENCY が最高に設定されています。
# 重要度の高低だけが定義されています。
# 「使い分け」はあくまで一例で、どう使うかはWEBアプリ側の自由です。
ChromePHPHandlerの引数で、どのレベルを出力対象にするかを指定します。
指定したレベルと、それより重要度の高いレベルを表示します。
前述のコードでは Logger::DEBUG を指定しています。
DEBUG は最低レベルなので、結果的に全てのレベルが出力対象になります。
使用方法
実際に変数の値をコンソールに出力する場合は、
$data = "debug message"; // 表示したい変数。
$log->info($data); // 表示指示。info は Logger::INFO レベルのログを出力。
前述のコードでは Logger::DEBUG を指定しているので、
info も表示対象になります。
表示指示の関数は、
$log->debug()
$log->info()
$log->notice()
$log->warning()
$log->error()
$log->critical()
$log->alert()
$log->emergency()
と、レベル毎に用意されています。
ChromePHPHandler() の引数を変更することで、
どのレベルまで表示するかを調整できます。
表示指示関数の引数は、文字列のみ利用可能です。
配列などの複座うな構造を持つ変数では、変換が必要になります。
// 一例
$data = array("a"=>"aaa", "b"=>"bbb");
$log->info(var_export($data, true));
pushHandler 用の関数は、ChromePHPHandler 以外にも多数用意されています。
StreamHandler を使えば、表示データをファイルに保存できます。
require_once __DIR__ . '/../vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler; // 出力先をストリーム(ファイルなど) に
// ログ出力用のクラス設定
$log = new Logger('debug');
$log->pushHandler(new StreamHandler("php_debug.log", Logger::DEBUG)); // ファイル php_debug.log に保存
pushHandler は、複数を同時に指定することも可能です。
$log->pushHandler(new ChromePHPHandler(Logger::DEBUG));
$log->pushHandler(new StreamHandler("php_debug.log", Logger::DEBUG));
PHP WEB アプリのデバック用ツールは、他にも沢山あります。
が、記載現在もメンテナンスが続けられているものは少ないです。
特に PHP8 以降、エラーチェックが厳しくなってからは、
ChromePhp など、
エラーで実行が止まったり滞ったりするものが多いです。
サンプル・プログラムで使用している Monolog は、
高機能ですし、現在もメンテナンスが継続されているので助かります。