やったこと

webサービスを作るときに考えたことを垂れ流します

【CakePHP3】独自のエラーログを出力するコンポーネントを作成!

CakePHP3で、自分専用のファイルにログを出力するコンポーネントを作ってみました。
以下、その手順です。

①「app.php」を修正!
「app.php」に新しく「myerr」というオリジナルログを追加します。

    'Log' => [
        'debug' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'debug',
            'levels' => ['notice', 'info', 'debug'],
            'scopes' => false, //★これを入れないと「debug.log」にもログが出力されちゃう
        ],
        'error' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'file' => 'error',
            'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        ],
        //★↓以下を新しく追加
        'myerr' => [
            'className' => 'Cake\Log\Engine\FileLog',
            'path' => LOGS,
            'levels' => [],
            'scopes' => ['myerr'],
            'file' => 'myerr.log',
        ],
    ],


②ログ出力コンポーネントを作成!
「/Controller/Component/」に新しくコンポーネント「LoggerComponent.php」を作成します。

<?php
namespace App\Controller\Component;

use Cake\Controller\Component;
use Cake\Log\Log;

class LoggerComponent extends Component {
    public function write($str) {
      Log::debug($str, ['scope' => ['myerr']]);
    }
}


③ログを出力してみる!
お好きなコントローラー内でオリジナルログを出力してみます。
ログは「/logs/myerr.log」に記録されます。

class HogegeController extends AppController
{
  public function err_occur()
  {
    //コンポーネント読み込み
    $this->loadComponent('Logger');

    //ログ出力
    $this->Logger->write("testes");
  }
}

以上!