[PHP]Fatal Error発生時にログを作成する

Pocket

Fatal Error 発生時、以降の処理は中断されるため通常は try ~ catch などでエラーを捕捉することができません。
そこで、register_shutdown_function() を使ってスクリプト終了時に関数を実行し、エラーの内容をテキストとして保存します。

<?php
register_shutdown_function('shutdown');

$test = new Test();

function shutdown(){
	$error = error_get_last();
	
	if(empty($error)) return;
	
	switch($error['type']){
		case(E_ERROR):   $type = "Fatal Error"; break;
		case(E_WARNING): $type = "Warning"; break;
		case(E_NOTICE):  $type = "Notice"; break;
		default:         $type = "Error";
	}
	
	$date = new DateTime();
	$line = sprintf("%s: %s. %s in %s on line %s\n",
		$date->format('Y-m-d H:i:s'), $type, $error['message'],
		$error['file'], $error['line']);
    file_put_contents(dirname(__FILE__) . "/log.txt", $line,
		FILE_APPEND | LOCK_EX);
}

【出力結果】

2015-02-23 08:03:36: Fatal Error. Class 'Test' not found in C:\xampp\htdocs\lab\index.php on line 4

存在しないクラスをインスタンス化しようとして Fatal Error が発生しています。
error_get_last() で最後に発生したエラーを取得できるので、それを整形してログファイルに追記します。

参考: http://php.net/manual/ja/function.register-shutdown-function.php


Similar Posts:




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です