最終更新: clever_next 2015年08月16日(日) 17:26:26履歴
<?php /** * LOG */ // ログ出力先 ../tmp/logs/YYYYMM/error.YYYYMMDD.log $myLogFileName = "error." . date('Ymd') . ".log"; $myLogDirName = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'logs' . DIRECTORY_SEPARATOR . date('Ym'); define('MY_ERROR_LOG_PATH', $myLogDirName .DIRECTORY_SEPARATOR . $myLogFileName); function myLog($msg, $level = "INFO") { // 出力先ディレクトリがなければ作る if (!file_exists (dirname(MY_ERROR_LOG_PATH))){ mkdir(dirname(MY_ERROR_LOG_PATH), 0755, TRUE); } $fp = fopen(MY_ERROR_LOG_PATH, 'a'); fwrite($fp, myLogFormat($msg."\n", $level)); fclose($fp); } function myLogFormat($msg, $level) { $format = "[%s][%s] %s"; $msg = sprintf($format, date("Y-m-d H:i:s"), $level, $msg); return $msg; } /** * Error Handler */ set_error_handler( 'myErrorHandler' ); function myErrorHandler($errno, $errstr, $errfile, $errline, $errcontext) { $msg = null; switch($errno){ case E_ERROR: $level = "E_ERROR"; break; case E_WARNING: $level = "E_WARNING"; break; case E_PARSE: $level = "E_PARSE"; break; case E_NOTICE: $level = "E_NOTICE"; break; case E_CORE_ERROR: $level = "E_CORE_ERROR"; break; case E_CORE_WARNING: $level = "E_CORE_WARNING"; break; case E_COMPILE_ERROR: $level = "E_COMPILE_ERROR"; break; case E_COMPILE_WARNING: $level = "E_COMPILE_WARNING"; break; case E_USER_ERROR: $level = "E_USER_ERROR"; break; case E_USER_WARNING: $level = "E_USER_WARNING"; break; case E_USER_NOTICE: $level = "E_USER_NOTICE"; break; case E_STRICT: $level = "E_STRICT"; break; case E_RECOVERABLE_ERROR: $level = "E_RECOVERABLE_ERROR"; break; case E_DEPRECATED: $level = "E_DEPRECATED"; break; case E_USER_DEPRECATED: $level = "E_USER_DEPRECATED"; break; default: $level = "ERROR"; $msg = "Unknown error type: [$errno] $errstr"; break; } if (is_null($msg)) $msg = $errstr; $msg = $msg . " in $errfile on line $errline"; myLog($msg, $level); return false; //PHP自身のエラーハンドラも実行 } /** * shutdown */ register_shutdown_function( 'myShutdownHandler' ); function myShutdownHandler() { if ($error = error_get_last()){ switch($error['type']){ case E_ERROR: case E_PARSE: case E_CORE_ERROR: case E_CORE_WARNING: case E_COMPILE_ERROR: case E_COMPILE_WARNING: myErrorHandler($error['type'], $error['message'], $error['file'], $error['line'], null); break; } } }
コメントをかく