こんにちは!フリーエンジニアのヤマシタです。
システムを運用する上で、コンピューターの稼働状況やエラーの内容、各種ステータスなどを確認するのにログはとても重要な情報となります。
この記事では、
・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メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!