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');