CakePHP3 特定のエラーログ出力を止める

Pocket

CakePHP3を使っていると、logs/error.log というファイルに沢山エラーが出力される。例えば存在しないパスにアクセスするだけでいちいちエラーが出力されるので本当に大切なエラーが埋もれてしまう。404などのNot Found系エラーをerror.phpに出力しないためには?

ログ出力したくないエラーは例えば、「Actionが存在しない」とか「Controllerが存在しない」とか「レコードが存在しない」とかそういった物がある。それぞれ異なるExceptionを投げてくるので、それらException毎にログ非表示を設定する事ができる。

error.logの例

2015-11-18 11:31:21 Error: [Cake\Controller\Exception\MissingActionException] Action HogeController::hoge() could not be found, or is not accessible.

Exception Attributes: array ( 'controller' => 'HogeController', 'action' => 'hoge', 'prefix' => '', 'plugin' => NULL, )

Request URL: /hoge/hoge Stack Trace:

ユーザが存在しないページにアクセスするたびに上記のようなエラーログが出力されるので鬱陶しい。

config/app.php の’Error’設定に対して’skipLog’で不要なExceptionの種類を指定するだけでこれを停止出来る。

config/app.php

'Error' => [
   'errorLevel' => E_ALL & ~E_DEPRECATED,
   'exceptionRenderer' => 'Cake\Error\ExceptionRenderer',
   'skipLog' => [],
   'log' => true,
   'trace' => true,
   'skipLog' => ['Cake\Network\Exception\NotFoundException',
                    'Cake\Routing\Exception\MissingControllerException',
                    'Cake\Controller\Exception\MissingActionException',
                    'Cake\Datasource\Exception\RecordNotFoundException',
   ],
],

これだけだ。

ここでは、NotFoundExceptionとMissingControllerException, MissingActionException, RecordNotFoundExceptionを指定した。

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

Pocket