CakePHP3にてカスタムログを出力する

Pocket

CakePHPでは、debug.logとerror.logが用意されておりレベルに合わせて出力する事ができる。しかし場合によってはユーザ特定の処理に関するログを別ログファイルにまとめて出力したい場合があるのでその方法を記す。

別ファイルにログ出力するにはscopeを設定するだけでよい。

ただしそれだけだと同じログがdebug.logとカスタムログの両方に出力されてしまう。それでよければそれでおしまい。

もし元のerror.logやdebug.logにはロギングしたくない場合はそれらのscopesにfalseを指定する。

カスタムログ出力手順

app.php

return [
   'Log' => [
      'debug' => [
         'className' => 'Cake\Log\Engine\FileLog',
         'path' => LOGS,
         'file' => 'debug',
         'levels' => ['notice', 'info', 'debug'],
         'scopes' => false,  // 超重要:これがないと、shell, retrievalのscopeもlevelに合わせてdebug.logに出力されてしまう。
      ],
      'error' => [
         'className' => 'Cake\Log\Engine\FileLog',
         'path' => LOGS,
         'file' => 'error',
         'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
      ],
      'your_scope' => [
         'className' => 'Cake\Log\Engine\FileLog',
         'path' => LOGS,
         'file' => 'your_file_name',
         'levels' => [],
         'scopes' => ['your_scope'],
      ],
   ],
];

ポイント

  • debugのscopesにfalseを指定する
  • your_scopeを追加する

YourSource.php

Log::info($type . $path, 'your_scope');
Log::info($type . $path, ['your_scope']);
Log::info($type . $path, ['scope'  => ['your_scope']]);

ポイント

  • scopeの指定方法は文字列、配列、連想配列のscopeキー。どれでもOK

これでロギングの時に「your_scope」スコープを指定する事で「your_file_name.log」に出力され、されにdebug.logにはログが出力されない様にする事ができる。

 

記事が役に立ったらぜひシェアをお願いします。

Pocket

One thought on “CakePHP3にてカスタムログを出力する”

  1. 以下が大切ですね。

    ‘scopes’ => false, // 超重要:これがないと、shell, retrievalのscopeもlevelに合わせてdebug.logに出力されてしまう。

Comments are closed.