phpでのエラー出力
phpでの基本のエラー出力はerror_log()関数が一般的
その他のフレームワークではDataDogさんかがまとめてくれてるので参考にします。
https://docs.datadoghq.com/ja/logs/log_collection/php/?tab=phpmonolog
laravelの場合Monologが標準採用されているのでMonologを有効活用するのが良さそう。
monologが入っていない場合はcomposerで入れます。
composer reqire monolog/monolog
後は、エラー出力を定義します。
チャンネルにより、定義を設定できます。
今回はエラー種別により出力ファイルを変えたいので、エラー単位毎のチャンネルを作成しました。
use Monolog\Logger;
use Monolog\Formatter\LineFormatter;
use Monolog\Handler\StreamHandler;
// タイムゾーン設定
date_default_timezone_set("Asia/Tokyo");
// フォーマッタの作成
$dateFormat = "Y-m-d H:i:s";
$output = "[%datetime%] %channel% %level_name% %message%\n";
$formatter = new LineFormatter($output, $dateFormat);
/* ログ準備 チャンネルの生成 */
try {
// 各チャンネルの作成
$errorChannel = new Logger('error');
$infoChannel = new Logger('info');
$debugChannel = new Logger('debug');
// 各エラーのログのみを出力するハンドラーの作成
$errorHandler = new StreamHandler(__DIR__ . '/log/error.log');
$infoHandler = new StreamHandler(__DIR__ . '/log/info.log');
$debugHandler = new StreamHandler(__DIR__ . '/log/debug.log');
// 各ハンドラにフォーマッターの設定
$errorHandler->setFormatter($formatter);
$infoHandler->setFormatter($formatter);
$debugHandler->setFormatter($formatter);
// チャンネルとハンドラーの紐付け
$errorChannel->pushHandler($errorHandler);
$infoChannel->pushHandler($infoHandler);
$debugChannel->pushHandler($debugHandler);
} catch (\Exception $e) {
die($e->getMessage());
}
$errorChannel->error('エラー');
$infoChannel->info('インフォ');
$debugChannel->debug('debug');