Monolog ドキュメント
ログメッセージを Monolog のハンドラーに送る CakePHP 2 のログエンジンです。 フォーマッターとプロセッサーは CakeLog::config() で設定します。
CakePHP には高度なロギングの仕組みがありますが、ほかの方法でログを扱う (ファイルのローテーション、Logstash、 メールでの通知など) には、さらに多くのコードが必要です。書くコードをできるだけ少なくするために、このプラグインは よく使われている Monolog ライブラリを使います。
インストール
Composer でプラグインをインストールします。
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) の早い段階で読み込みます。
require_once CONFIG . 'log.php';CakePHP と同じことを Monolog で行う基本的な設定は次のようになります。
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 ハンドラー を参照)
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 が 同梱されています。引数は次のとおりです:
- 宛先
- 件名
- 使用するメールの設定 (デフォルトは
default) - 最小のレベル (デフォルトは
Logger::ERROR) - メッセージをスタックの上位に伝播させるかどうか (デフォルトは
true)
これは Monolog の一部ではないので、上の例のように、ハンドラー名に完全なクラス名を使い、search にクラスの ディレクトリを設定してください。CakeEmail 以外のクラスでメールを送信するには、Email.classname を設定します。
Configure::write('Email.classname', 'MyEmail');由来
このパッケージは jadb/cakephp-monolog (Packagist では jadb/cakephp-monolog、アップストリームの最終バージョンは 2.0.0) のメンテナンスされたフォークで、 元の作者は Jad Bitar です。 pieceofcake2 が、モダンな PHP で動く CakePHP 2 向けに メンテナンスしています。オリジナルからの変更点は フォーク以降のコミット履歴 で確認できます。
