アーカイブ : 2019年 1月

CakePHP3でログをカスタマイズする

CakePHP2向けの情報は結構ネットにあるんだけどね、
なぜかCakePHP3向けがないので。

とりあえず今回はミリ秒までロギングさせたかった。
vender/cakephp/cakephp/Log/Engine/FileLog.phpを元に
app/src/Log/CustomFileLog.phpを作る。

【app/src/Log/CustomFileLog.php】
<?php
namespace App\Log;
use Cake\Log\Engine\FileLog;

class CustomeFileLog extends FileLog
{
public function log($level, $message, array $context = [])
{
$message = $this->_format($message, $context);
$output = date('Y-m-d H:i:s'). '.'
. substr(explode('.', (microtime(true) . ''))[1], 0, 3)
. ' ' . ucfirst($level) . ': ' . $message . "\n";
(以下略)
}
}

で、config/app.phpとかで設定しているロギングの設定で、classNameを書き換えるだけ。

【before】
Log::config('debug'), [
'className' => 'Cake¥Log¥Engine¥FileLog',
(以下略)

【after】
Log::config('debug'), [
'className' => 'App¥Log¥CustomFileLog'
(以下略)

vender/cakephpの中身をスーパークラスにしてサブクラスを実装するのは
なんとなく難しそうかなーとか思ってたけど、
とりあえずロギングに関してはものすごく簡単な話でした、というお話。