public function onBootstrap(MvcEvent $e) { $serviceManager = $e->getApplication()->getServiceManager(); $application = $e->getApplication(); $eventManager = $application->getEventManager(); $eventManager->attach(MvcEvent::EVENT_DISPATCH, function ($event) use($serviceManager) { $serviceManager = ServiceLocatorFactory::getInstance()->getServiceLocator(); $action = $event->getRouteMatch()->getParam('action'); $action = $action . "Action"; if (!method_exists($event->getTarget(), $action)) { $url = $event->getRequest()->getUri()->getPath(); $errorInfo = new EventLogger($serviceManager); $errorInfo->set_event_type(EventType::ROUTER_NOT_MATCH); $trace = debug_backtrace(); array_shift($trace); $errorMessage = 'The requested controller ' . $event->getRouteMatch()->getParam('controller') . ' was unable to dispatch the request'; $errorInfo->handle(Application::ERROR_CONTROLLER_CANNOT_DISPATCH, $errorMessage, null, null, $trace, null, $url); } }); $eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, function ($event) use($serviceManager) { $exception = $event->getResult()->exception; if ($exception instanceof \Exception) { $errorInfo = new EventLogger($serviceManager); $errorInfo->set_event_type(EventType::EXCEPTION_DISPATCH); $errorInfo->handle($exception); die; } $error = $event->getError(); $url = $event->getRequest()->getUri()->getPath(); $errorMessage = ""; if ($error == Application::ERROR_CONTROLLER_NOT_FOUND) { $errorMessage = 'The requested controller ' . $event->getRouteMatch()->getParam('controller') . ' could not be mapped to an existing controller class'; } if ($error == Application::ERROR_CONTROLLER_INVALID) { $errorMessage = 'The requested controller ' . $event->getRouteMatch()->getParam('controller') . ' is not dispatchable'; } if ($error == Application::ERROR_ROUTER_NO_MATCH) { $errorMessage = 'The requested URL could not be matched by routing'; } if ($error == Application::ERROR_CONTROLLER_NOT_FOUND || $error == Application::ERROR_CONTROLLER_INVALID || $error == Application::ERROR_ROUTER_NO_MATCH) { $trace = debug_backtrace(); array_shift($trace); $errorInfo = new EventLogger($serviceManager); $errorInfo->set_event_type(EventType::ROUTER_NOT_MATCH); $errorInfo->handle($error, $errorMessage, null, null, $trace, null, $url); } }); $eventManager->attach(MvcEvent::EVENT_RENDER_ERROR, function ($event) use($serviceManager) { $exception = $event->getResult()->exception; if ($exception instanceof \Exception) { $errorInfo = new EventLogger($serviceManager); $errorInfo->set_event_type(EventType::EXCEPTION_RENDER); $errorInfo->handle($exception); die; } }); $factory = ServiceLocatorFactory::getInstance(); $factory->setServiceLocator($serviceManager); }
public function handle() { $args = func_get_arg(0); $serviceManager = ServiceLocatorFactory::getInstance()->getServiceLocator(); $config = $serviceManager->get('config'); $headers = $serviceManager->get('request')->getHeaders(); $this->_customConfig = $config["GTErrorTracker"]; $this->_customConfig['errorCodeResponse'] = $this->_customConfig['errorCodeResponse'] ? $this->_customConfig['errorCodeResponse'] : self::ERROR_CODE_RESPONSE; $this->_customConfig['secondsPreventErrorRecursion'] = $this->_customConfig['secondsPreventErrorRecursion'] ? $this->_customConfig['secondsPreventErrorRecursion'] : self::SECONDS_PREVENT_ERROR_RECURSION; $this->_headerSignKey = $headers->get('Signkey'); $this->_headerToken = $headers->get('Token'); if ($args instanceof \Exception) { $this->_f_event_file = $args->getFile(); $this->_f_message = $args->getMessage(); $this->_f_line = $args->getLine(); $this->_f_event_code = "Exception:" . $args->getCode(); $this->_f_stack_trace = $this->stackTraceProcessing($args->getTrace(), $args->getMessage()); if (isset($args->xdebug_message)) { $this->_f_xdebug_message = $args->xdebug_message; } } else { //Arguments Order //$errno, $errstr, $errfile, $errline, $trace $args = func_get_args(); $errno = $args[0]; $errstr = $args[1]; $this->_f_event_file = $args[2]; $this->_f_line = $args[3]; $trace = $args[4]; // trace array $errcontext = $args[5]; // variables value near error $route = isset($args[6]) ? $args[6] : null; //wrong route on 404 page $type = "Undefined"; switch ($errno) { case E_ERROR: $type = "E_ERROR"; break; case E_WARNING: $type = "E_WARNING"; break; case E_PARSE: $type = "E_PARSE"; break; case E_NOTICE: $type = "E_NOTICE"; break; case E_CORE_ERROR: $type = "E_CORE_ERROR"; break; case E_CORE_WARNING: $type = "E_CORE_WARNING"; break; case E_COMPILE_ERROR: $type = "E_COMPILE_ERROR"; break; case E_COMPILE_WARNING: $type = "E_COMPILE_WARNING"; break; case E_USER_ERROR: $type = "E_USER_ERROR"; break; case E_USER_WARNING: $type = "E_USER_WARNING"; break; case E_USER_NOTICE: $type = "E_USER_NOTICE"; break; case E_STRICT: $type = "E_STRICT"; break; case E_RECOVERABLE_ERROR: $type = "E_RECOVERABLE_ERROR"; break; case E_DEPRECATED: $type = "E_DEPRECATED"; break; case E_USER_DEPRECATED: $type = "E_USER_DEPRECATED"; break; case Application::ERROR_CONTROLLER_NOT_FOUND: $type = "ERROR_CONTROLLER_NOT_FOUND"; break; case Application::ERROR_CONTROLLER_INVALID: $type = "ERROR_CONTROLLER_INVALID"; break; case Application::ERROR_ROUTER_NO_MATCH: $type = "ERROR_ROUTER_NO_MATCH"; break; case Application::ERROR_CONTROLLER_CANNOT_DISPATCH: $type = "ERROR_CONTROLLER_CANNOT_DISPATCH"; break; } $this->_f_event_code = $type; if ($this->_f_event_type == EventType::ROUTER_NOT_MATCH) { $this->_f_message = "{$errstr} at route: {$route}"; } else { $this->_f_message = "Backtrace from {$this->_f_event_code} {$errstr} at {$this->_f_event_file} {$this->_f_line} "; } $this->_f_stack_trace = $this->stackTraceProcessing($trace, $this->_f_message); } $remote = new RemoteAddress(); $this->_f_ip_address = $remote->getIpAddress(); $hasGTCurrentUser = ServiceLocatorFactory::getInstance()->getServiceLocator()->has('gt_current_user'); if ($hasGTCurrentUser) { $user = ServiceLocatorFactory::getInstance()->getServiceLocator()->get('gt_current_user'); if ($user instanceof GTUserInterface) { $this->_f_user_id = $user->getId(); } } $event_hash = $this->getHash(); $session = new Container('user'); if ($session->eventHash == $event_hash) { if ($this->_f_date_time - $session->errorTime < $this->_customConfig['secondsPreventErrorRecursion']) { $this->echoIfDevMode($session->lastEventId); } else { $session->errorTime = $this->_f_date_time; // save time when error has been occurred $this->redirectIfDevMode($session->lastEventId); } } else { $this->_f_event_hash = $event_hash; if ($this->_customConfig["GTErrorTypesSaveToDb"][H\EventType::getName($this->_f_event_type)]) { $this->save(); $session->eventHash = $event_hash; // save new Hash to session $session->lastEventId = $this->_f_event_logger_id; // save new ID to session $session->errorTime = $this->_f_date_time; // save time when error has been occurred $this->redirectIfDevMode($session->lastEventId); } } }
function process_error_backtrace($errno, $errstr, $errfile, $errline, $errcontext) { $sm = ServiceLocatorFactory::getInstance()->getServiceLocator(); $customEvent = new EventLogger($sm); switch ($errno) { case E_ERROR: $errorDangerLevel = EventType::ERROR_PHP; break; case E_WARNING: $errorDangerLevel = EventType::WARNING_PHP; break; case E_PARSE: $errorDangerLevel = EventType::ERROR_PHP; break; case E_NOTICE: $errorDangerLevel = EventType::NOTICE_PHP; break; case E_CORE_ERROR: $errorDangerLevel = EventType::ERROR_PHP; break; case E_CORE_WARNING: $errorDangerLevel = EventType::WARNING_PHP; break; case E_COMPILE_ERROR: $errorDangerLevel = EventType::ERROR_PHP; break; case E_COMPILE_WARNING: $errorDangerLevel = EventType::WARNING_PHP; break; case E_USER_ERROR: $errorDangerLevel = EventType::ERROR_PHP; break; case E_USER_WARNING: $errorDangerLevel = EventType::WARNING_PHP; break; case E_USER_NOTICE: $errorDangerLevel = EventType::NOTICE_PHP; break; case E_STRICT: $errorDangerLevel = EventType::WARNING_PHP; break; case E_RECOVERABLE_ERROR: $errorDangerLevel = EventType::ERROR_PHP; break; case E_DEPRECATED: $errorDangerLevel = EventType::NOTICE_PHP; break; case E_USER_DEPRECATED: $errorDangerLevel = EventType::NOTICE_PHP; break; default: $errorDangerLevel = EventType::ERROR_PHP; break; } $customEvent->set_event_type($errorDangerLevel); $trace = debug_backtrace(); array_shift($trace); $customEvent->handle($errno, $errstr, $errfile, $errline, $trace, $errcontext); if ($errorDangerLevel == EventType::ERROR_PHP) { die; } }