/** * Filters out PHP errors before they get sent * * @param int $type * @param string $message * @param string $file * @param int $line * @param array $context * @see http://us3.php.net/manual/en/function.set-error-handler.php * @return bool */ public function shouldSendError($type, $message, $file = null, $line = null, $context = null) { $level = $this->config->get('errorReportingLevel'); if (-1 == $level) { return true; } return $level & $type; }
/** * Convert the notice to xml * * @param Airbrake\Configuration $configuration * @return string */ public function toXml(Configuration $configuration) { $doc = new SimpleXMLElement('<notice />'); $doc->addAttribute('version', Version::API); $doc->addChild('api-key', $configuration->get('apiKey')); $notifier = $doc->addChild('notifier'); $notifier->addChild('name', Version::NAME); $notifier->addChild('version', Version::NUMBER); $notifier->addChild('url', Version::APP_URL); $env = $doc->addChild('server-environment'); $env->addChild('project-root', $configuration->get('projectRoot')); $env->addChild('environment-name', $configuration->get('environmentName')); $error = $doc->addChild('error'); $error->addChild('class', $this->errorClass); $error->addChild('message', htmlspecialchars($this->errorMessage)); if (count($this->backtrace) > 0) { $backtrace = $error->addChild('backtrace'); foreach ($this->backtrace as $entry) { $method = isset($entry['class']) ? $entry['class'] . '::' : ''; $method .= isset($entry['function']) ? $entry['function'] : ''; $line = $backtrace->addChild('line'); $line->addAttribute('file', isset($entry['file']) ? $entry['file'] : ''); $line->addAttribute('number', isset($entry['line']) ? $entry['line'] : ''); $line->addAttribute('method', $method); } } $request = $doc->addChild('request'); $request->addChild('url', $configuration->get('url')); $request->addChild('component', $configuration->get('component')); $request->addChild('action', $configuration->get('action')); $this->array2Node($request, 'params', array_merge($configuration->getParameters(), array('airbrake_extra' => $this->extraParameters))); $this->array2Node($request, 'session', $configuration->get('sessionData')); $this->array2Node($request, 'cgi-data', $configuration->get('serverData')); return $doc->asXML(); }
/** * Get the current handler. * * @param string $apiKey * @param bool $notifyOnWarning * @param array $options * @return EventHandler */ public static function start($apiKey, $notifyOnWarning = false, array $options = array()) { if (!isset(self::$instance)) { $config = new Configuration($apiKey, $options); $client = new Client($config); self::$instance = new self($client, $notifyOnWarning); if (null !== $config->get('errorReportingLevel')) { self::$instance->addErrorFilter(new ErrorReporting($config)); } self::$instance->addExceptionFilter(new AirbrakeExceptionFilter()); set_error_handler(array(self::$instance, 'onError')); set_exception_handler(array(self::$instance, 'onException')); register_shutdown_function(array(self::$instance, 'onShutdown')); } return self::$instance; }
protected function cleanFilePath($filePath) { $projectRoot = $this->configuration->get('projectRoot'); return empty($projectRoot) ? $filePath : preg_replace("#^{$projectRoot}#", '[project_root]', $filePath); }