Skip to content
これは pieceofcake2/monolog のドキュメントです。pieceofcake2/cakephp 用の CakePHP 2.x プラグインです。 このフォークについて

Monolog ドキュメント ​

ログメッセージを Monolog のハンドラーに送る CakePHP 2 のログエンジンです。 フォーマッターとプロセッサーは CakeLog::config() で設定します。

CakePHP には高度なロギングの仕組みがありますが、ほかの方法でログを扱う (ファイルのローテーション、Logstash、 メールでの通知など) には、さらに多くのコードが必要です。書くコードをできるだけ少なくするために、このプラグインは よく使われている Monolog ライブラリを使います。

インストール ​

Composer でプラグインをインストールします。

bash
composer require pieceofcake2/monolog

依存パッケージとして Monolog (monolog/monolog 2.x または 3.x) もインストールされます。

このプラグインは cakephp-plugin タイプなので、composer/installers によってプラグインのディレクトリに (Monolog として) インストールされます。正しい場所にインストールされるように、アプリケーションの composer.json で installer-paths を設定してください。

構成installer-paths
モダン (config/、src/、templates/、plugins/)"plugins/{$name}/": ["type:cakephp-plugin"]
レガシー (app/Config/、app/Plugin/)"app/Plugin/{$name}/": ["type:cakephp-plugin"]

設定 ​

まず、ログの設定ファイル config/log.php (レガシー構成では app/Config/log.php) を作成し、 config/bootstrap.php (レガシー構成では app/Config/bootstrap.php) の早い段階で読み込みます。

php
require_once CONFIG . 'log.php';

CakePHP と同じことを Monolog で行う基本的な設定は次のようになります。

php
CakePlugin::load('Monolog');

CakeLog::config('debug', [
    'engine' => 'Monolog.Monolog',
    'channel' => 'app',
    'handlers' => [
        'Stream' => [
            LOGS . 'debug.log',
            'formatters' => [
                'Line' => ["%datetime% %channel% %level_name%: %message%\n"],
            ],
        ],
    ],
]);

オプション:

  • channel: Monolog のチャンネルの名前 (デフォルトは monolog)
  • handlers: ロガーに追加するハンドラー (デフォルト: LOGS . 'monolog.log' に書き込む Stream ハンドラー)
  • processors: ロガーに追加するプロセッサー

ハンドラー、フォーマッター、プロセッサーは、Monolog での短い名前で指定します。Stream は Monolog\Handler\StreamHandler を、Line は Monolog\Formatter\LineFormatter を、MemoryUsage は Monolog\Processor\MemoryUsageProcessor を作成します。値はコンストラクターの引数で、順番どおりに渡されます。 ハンドラーには、それぞれ独自の formatters と processors を指定できます。types や scopes などの CakePHP の 標準のオプションは、通常どおり使えます。

高度な設定 ​

それでは本格的なロギングをしてみましょう。そうでなければ、デフォルトの CakePHP のロギング の仕組みから わざわざ移行する意味がありません。

次の例では、以下を設定します。

  • 30 日間保持され、Logstash で読める、メモリ使用量のピークの情報付きの ローテーションするログ
  • リクエストについてずっと詳しい情報を含む通常のログファイル
  • エラーメッセージだけを含むメールでの通知 (CakeEmail ハンドラー を参照)
php
CakeLog::config('logstash', [
    'engine' => 'Monolog.Monolog',
    'channel' => 'app',
    'handlers' => [
        'RotatingFile' => [
            LOGS . 'logstash.log',
            30,
            'formatters' => [
                'Logstash' => ['web', env('SERVER_ADDR')],
            ],
            'processors' => ['MemoryPeakUsage'],
        ],
        'Stream' => [
            LOGS . 'app.log',
            'formatters' => [
                'Line' => ["%datetime% %channel% %level_name%: %message% %context% %extra%\n"],
            ],
            'processors' => ['MemoryUsage', 'Web'],
        ],
        'CakeEmailHandler' => [
            'admin@example.com',
            'ALERT: APPLICATION REQUIRES IMMEDIATE ATTENTION.',
            'default',
            'search' => CakePlugin::path('Monolog') . 'Lib' . DS . 'Log' . DS . 'Handler',
        ],
    ],
]);

CakeEmail ハンドラー ​

このプラグインには、CakeEmail でログメッセージを送信する Monolog のメールハンドラー CakeEmailHandler が 同梱されています。引数は次のとおりです:

  1. 宛先
  2. 件名
  3. 使用するメールの設定 (デフォルトは default)
  4. 最小のレベル (デフォルトは Logger::ERROR)
  5. メッセージをスタックの上位に伝播させるかどうか (デフォルトは true)

これは Monolog の一部ではないので、上の例のように、ハンドラー名に完全なクラス名を使い、search にクラスの ディレクトリを設定してください。CakeEmail 以外のクラスでメールを送信するには、Email.classname を設定します。

php
Configure::write('Email.classname', 'MyEmail');

由来 ​

このパッケージは jadb/cakephp-monolog (Packagist では jadb/cakephp-monolog、アップストリームの最終バージョンは 2.0.0) のメンテナンスされたフォークで、 元の作者は Jad Bitar です。 pieceofcake2 が、モダンな PHP で動く CakePHP 2 向けに メンテナンスしています。オリジナルからの変更点は フォーク以降のコミット履歴 で確認できます。

著作権とライセンスについては LICENSE を参照してください。Cake Software Foundation とは関係ありません。