CakePHP3のログ出力

2019-10-25

CakePHP3で色々作るに当たって、デバッグ用にログ機能のドキュメントを読んだのでメモ。

目次

デフォルトのログ出力

現時点(3.8.4)ではデフォルトでログ関数(Log::infoなど)を使い出力ができます。

ログレベルの種類
↑エラーなど緊急性の高いログ

  • emergency
  • alert
  • critical
  • error
  • warning
  • notice
  • info
  • debug

↓デバッグなど緊急性の低いログ

ログの出力の仕方

// Logオブジェクトをロード
use Cake\Log\Log;

/*
classやfunctionの記述
*/

// 第1引数にレベルを指定して出力
Log::write('debug','writeで出力');

// レベルごとに定義されている関数で出力
Log::info('infoとして出力');

// 第2引数にレベルを指定して出力(省略するとerrorが設定される)
$this->log("logで出力", 'critical');

このソースを実行するとlogsディレクトリのdebug.logとerror.logに出力される。

logs/debug.log
2019-10-24 08:42:19 Debug: writeで出力
2019-10-24 08:42:19 Info: infoとして出力
logs/error.log
2019-10-24 08:42:19 Critical: logで出力

デフォルトのログの設定箇所

デフォルト設定の読み込みはbootstrap.phpで行っている。

bootstrap.php
Log::setConfig(Configure::consume('Log'));

この設定内容を見てみると
debugにはnotice、info、debug、
errorにはwarning、error、critical、alert、emergency
が出力されるようになっている。

[
	'debug' => [
		'className' => 'Cake\Log\Engine\FileLog',
		'path' => '/var/www/html/app/logs/',
		'file' => 'debug',
		'url' => null,
		'scopes' => false,
		'levels' => [
			(int) 0 => 'notice',
			(int) 1 => 'info',
			(int) 2 => 'debug'
		]
	],
	'error' => [
		'className' => 'Cake\Log\Engine\FileLog',
		'path' => '/var/www/html/app/logs/',
		'file' => 'error',
		'url' => null,
		'scopes' => false,
		'levels' => [
			(int) 0 => 'warning',
			(int) 1 => 'error',
			(int) 2 => 'critical',
			(int) 3 => 'alert',
			(int) 4 => 'emergency'
		]
	],
	'queries' => [
		'className' => 'Cake\Log\Engine\FileLog',
		'path' => '/var/www/html/app/logs/',
		'file' => 'queries',
		'url' => null,
		'scopes' => [
			(int) 0 => 'queriesLog'
		]
	]
]

SQLのログ出力

デフォルトのログ設定のqueriesは実行したSQLを出力することができる。
出力するにはapp.phpで指定しているDatasourcesのDB設定でlogにtrueを設定する。

app.php
    'Datasources' => [
        'default' => [
            'className' => Connection::class,
            'driver' => 'Cake\Database\Driver\Postgres',
            'persistent' => false,
            'host' => 'cakephp_test_cakephp_db_1',
            'username' => 'postgres',
            'password' => 'password',
            'database' => 'test_db',
            'timezone' => 'UTC',
            'flags' => [],
            'cacheMetadata' => true,
            'log' => true,

この状態でSQLを実行するとlogs/querie.logが作成され、実行日時とSQLが出力される。

logs/querie.log
2019-10-24 08:01:08 Debug: duration=2 rows=1 SELECT Records.id AS "Records__id", Records.name AS "Records__name", Records.created AS "Records__created", Records.modified AS "Records__modified" FROM records Records WHERE Records.id = 1 LIMIT 1
2019-10-24 08:20:40 Debug: duration=21 rows=4 SELECT DISTINCT table_schema AS schema,
            column_name AS name,
            data_type AS type,
            is_nullable AS null, column_default AS default,

app.php以外でもSQLログ出力のON/OFF設定が可能

use Cake\Datasource\ConnectionManager;
$conn = ConnectionManager::get('default');
$conn->logQueries(true); //trueで出力される
■同じタグの記事(最新5件)
DockerでCakePHP3+PostgreSQL環境を構築する
Composer install実行時のエラー
■同じタグの記事を見る