【CakePHP入門】logメソッドの使い方まとめ(ログの出力方法)

こんにちは!フリーエンジニアのヤマシタです。

システムを運用する上で、コンピューターの稼働状況やエラーの内容、各種ステータスなどを確認するのにログはとても重要な情報となります。

この記事では、

・logメソッドとは?
・logメソッドを使用してログを出力する方法

という基本的な内容から、

・ログのレベルを指定する
・出力するログファイル名を指定する
・ログファイルの出力先を指定する

などのlogメソッドの応用的な使い方について解説します。

ここではそんなlogメソッドについて、基本から応用までくわしく解説していきます!

使用環境: cakephp-3-4-7

logメソッドとは

システムを開発をする上で、エラーの内容やデバッグの内容を確認したいときは、ログファイルに内容を保存するのが一般的です。

CakePHPでログファイルに内容を保存するためには、コントローラのlogメソッドを使用します。

logメソッドは第一引数にログの内容を指定し、第二引数にはログのレベルを指定できます。

$this->log("ログの内容", '[ログレベル]');

CakePHP3.x系ではログファイルはデフォルトで「logs/error.log」に出力されます。

logメソッドの基本的な使い方

ここでは、実際にログの出力方法を見ていきましょう。

以下にlogメソッドを使用して、簡単なログを出力するサンプルを紹介します。

サンプルプログラムは 「src/Controller」に作成します。

<?php

namespace App\Controller;

use App\Controller\AppController;

class LogSampleController extends AppController {

  public function index()
  {
    //ログの書き込み
    $this->log('ログの書き込みテスト');
  }
}

このプログラムを実行すると「logs/error.log」に日時、ログレベル、ログの内容が出力されます。

2017-07-01 23:35:57 Error: ログの書き込みテスト

変数の内容をログに出力

プログラミングにおいて、開発時や試験のときに変数の内容をログに出力して確認したい場合があります。

logメソッドは文字列だけではなく、変数の内容をログに出力することができます。

class LogSampleController extends AppController {

  public function index()
  {
    $str = 'samurai engineer';

    //ログの書き込み
    $this->log('$str = ['.$str.']');
  }
}
2017-07-01 23:59:58 Error: $str = [samurai engineer]

logメソッドの引数に変数を指定すれば、変数の内容が出力されていることがわかります。

ログのレベルを指定する

logメソッドは第二引数を指定すると、記録するログのレベルを指定できます。

第二引数を指定しない場合は、デフォルトでエラーログのパスに書き込むerrorが設定されます。

第二引数で指定できるログレベルについては、CakePHPのドキュメントによると、以下のとおりです。

上から順に重要度が高いレベルになります。

ログレベル内容
Emergencyシステムは使用出来ません
Alert今すぐ行動する必要がある
Critical 致命的な状態
Errorエラー状態
Warning警告状態
Notice正常であるが、重大な状態
Infoインフォメーションメッセージ
Debugデバッグレベルメッセージ

以下にログのタイプを指定したサンプルを記述します。

class LogSampleController extends AppController {

  public function index()
  {
      //ログの書き込み
      $this->log('ログの書き込みテスト', "emergency" );
      $this->log('ログの書き込みテスト', "critical" );
      $this->log('ログの書き込みテスト', "debug" );
  }
}
error.log
2017-07-02 00:41:51 Emergency: ログの書き込みテスト
2017-07-02 00:41:51 Critical: ログの書き込みテスト
debug.log
2017-07-02 01:05:11 Debug: ログの書き込みテスト

指定したレベルでログが書き込まれていますね!

debugを指定すると、デフォルトでは「logs/debug.log」に書き込まれます。

ロギングの設定

出力するログファイル名を指定する

ログのファイル名を変更したり、新たに出力するファイルを指定する場合は、「config/app.php」の"onfigures logging options"の箇所に必要な情報を記述します。

/**
 * Configures logging options
 */
'Log' => [
    'debug' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'debug',
        'levels' => ['notice', 'info', 'debug'],
        'url' => env('LOG_DEBUG_URL', null),
    ],
    'error' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'error',
        'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        'url' => env('LOG_ERROR_URL', null),
    ],
    'original' => [
        'className' => 'Cake\Log\Engine\FileLog',
        'path' => LOGS,
        'file' => 'original',
        'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        'url' => env('LOG_ERROR_URL', null),
    ],
  ],

この例では、originalのログを新たに定義しています。

pathには出力先の定数を記述します。定数はデフォルトでLOGSと設定されています。定数の定義先は「config/paths.php」に記述されています。

fileにはログを出力するファイル名を記述し、levelsには出力するログレベルを指定します。

app.phpの内容を記述したら、original.logに内容が出力されるか確認してみましょう。

class LogSampleController extends AppController {

  public function index()
  {
    //ログの書き込み
    $this->log('original.logへの出力テスト');
  }
}

以下のようにoriginal.logが作成され、指定したログの内容が書き込まれていたら成功です!

2017-07-02 01:14:01 Error: original.logへの出力テスト

ログファイルの出力先を指定する

ログの出力先を変更するには、「config/path.php」に、パスを定義する必要があります。

デフォルトでは定数LOGSが定義されていて、path.phpを確認すると、以下のように記述されています。

define('LOGS', ROOT . DS . 'logs' . DS);

ログの出力先を変更するには、既存の定数LOGSの内容を変更するか、新たにdefineを定義して、定数やパスを指定する必要があります。

ここでは、以下のようにdefineの内容を追加してログの出力先を指定します。

/**
 * Path to the originallogs directory.
 */
define('LOGS_ORIGINAL', ROOT . DS . 'original_logs' . DS);

定数LOGS_ORIGINALを新たに作成したので、先述した「config/app.php」の”onfigures logging options"のpathにLOGS_ORIGINALを指定します。

設定したら、「ログの出力先を変更」で使用したサンプルプログラムを実行してみましょう。

プログラムを実行すると、指定したoriginal_logs以下にログファイルが作成され、ログの内容が出力されていればOKです!

まとめ

ここでは、CakePHPでのログの出力方法やログレベルの指定方法、ロギングの設定によるログファイルの作成やファイルの出力先を設定する方法などについて、解説しました。

ログファイルにエラーの内容や変数の内容を出力することはよくありますので、logメソッドの使い方についてはよく理解しておきましょう。

もしlogメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

SEからWebエンジニアへ転職した理由

侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
更新日 : 2019年10月7日

書いた人

ヤマシタ

エンジニア歴10年のフリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、200本以上の執筆経験があります。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説