Sentry/Client.php
function captureException(E $e, $data=null, $logger=null, $vars=null) {
        if (in_array(get_class($e), $this->exclude)) {
            return null;
        }
        if ($data === null) {
            $data = [];
        }
        $eOriginal = $e; /** @var E $eOriginal */
        do {
			$isDFE = $e instanceof DFE;
            $exc_data = [
            	'type' => $isDFE ? $e->sentryType() : get_class($e)
				,'value' => $this->serializer->serialize($isDFE ? $e->messageSentry() : $e->getMessage())
			];
            /**'exception'
             * Exception::getTrace doesn't store the point at where the exception
             * was thrown, so we have to stuff it in ourselves. Ugh.
             */
            $trace = $e->getTrace();
            /**
			 * 2016-12-22
			 * Убираем @see \Magento\Framework\App\ErrorHandler
			 * 2016-12-23
			 * И @see Breadcrumbs\ErrorHandler тоже убираем.
			 */
            /** @var bool $needAddFaceFrame */
            $needAddFakeFrame = !self::needSkipFrame($trace[0]);
			while (self::needSkipFrame($trace[0])) {
				array_shift($trace);
			}
            if ($needAddFakeFrame) {
				$frame_where_exception_thrown = array(
					'file' => $e->getFile(),
					'line' => $e->getLine(),
				);
				array_unshift($trace, $frame_where_exception_thrown);
			}
            $exc_data['stacktrace'] = array(
                'frames' => Stacktrace::get_stack_info(
                    $trace, $this->trace, $vars, $this->message_limit, $this->prefixes,
                    $this->app_path, $this->excluded_app_paths, $this->serializer, $this->reprSerializer
                ),
            );
            $exceptions[] = $exc_data;
        } while ($e = $e->getPrevious());
        $data['exception'] = array('values' => array_reverse($exceptions),);
        if ($logger !== null) {
            $data['logger'] = $logger;
        }
        if (empty($data['level'])) {
            if (method_exists($eOriginal, 'getSeverity')) {
                $data['level'] = $this->translateSeverity($eOriginal->getSeverity());
            }
            else {
                $data['level'] = self::ERROR;
            }
        }
        return $this->capture($data, $trace, $vars);
    }
function captureException(E $e, $data=null, $logger=null, $vars=null) {
        if (in_array(get_class($e), $this->exclude)) {
            return null;
        }
        if ($data === null) {
            $data = [];
        }
        $eOriginal = $e; /** @var E $eOriginal */
        do {
			$isDFE = $e instanceof DFE;
            $exc_data = [
            	'type' => $isDFE ? $e->sentryType() : get_class($e)
				,'value' => $this->serializer->serialize($isDFE ? $e->messageSentry() : $e->getMessage())
			];
            /**'exception'
             * Exception::getTrace doesn't store the point at where the exception
             * was thrown, so we have to stuff it in ourselves. Ugh.
             */
            $trace = $e->getTrace();
            /**
			 * 2016-12-22
			 * Убираем @see \Magento\Framework\App\ErrorHandler
			 * 2016-12-23
			 * И @see Breadcrumbs\ErrorHandler тоже убираем.
			 */
            /** @var bool $needAddFaceFrame */
            $needAddFakeFrame = !self::needSkipFrame($trace[0]);
			while (self::needSkipFrame($trace[0])) {
				array_shift($trace);
			}
            if ($needAddFakeFrame) {
				$frame_where_exception_thrown = array(
					'file' => $e->getFile(),
					'line' => $e->getLine(),
				);
				array_unshift($trace, $frame_where_exception_thrown);
			}
            $exc_data['stacktrace'] = array(
                'frames' => Stacktrace::get_stack_info(
                    $trace, $this->trace, $vars, $this->message_limit, $this->prefixes,
                    $this->app_path, $this->excluded_app_paths, $this->serializer, $this->reprSerializer
                ),
            );
            $exceptions[] = $exc_data;
        } while ($e = $e->getPrevious());
        $data['exception'] = array('values' => array_reverse($exceptions),);
        if ($logger !== null) {
            $data['logger'] = $logger;
        }
        if (empty($data['level'])) {
            if (method_exists($eOriginal, 'getSeverity')) {
                $data['level'] = $this->translateSeverity($eOriginal->getSeverity());
            }
            else {
                $data['level'] = self::ERROR;
            }
        }
        return $this->capture($data, $trace, $vars);
    }
function captureException ( E $ e , $ data = null , $ logger = null , $ vars = null ) { if ( in_array ( get_class ( $ e ) , $ this -> exclude ) ) { return null ; } if ( $ data === null ) { $ data = [ ] ; } $ eOriginal = $ e ; /** @var E $eOriginal */ do { $ isDFE = $ e instanceof DFE ; $ exc_data = [ 'type' => $ isDFE ? $ e -> sentryType ( ) : get_class ( $ e ) , 'value' => $ this -> serializer -> serialize ( $ isDFE ? $ e -> messageSentry ( ) : $ e -> getMessage ( ) ) ] ; /**'exception'
             * Exception::getTrace doesn't store the point at where the exception
             * was thrown, so we have to stuff it in ourselves. Ugh.
             */ $ trace = $ e -> getTrace ( ) ; /**
			 * 2016-12-22
			 * Убираем @see \Magento\Framework\App\ErrorHandler
			 * 2016-12-23
			 * И @see Breadcrumbs\ErrorHandler тоже убираем.
			 */ /** @var bool $needAddFaceFrame */ $ needAddFakeFrame = ! self :: needSkipFrame ( $ trace [ 0 ] ) ; while ( self :: needSkipFrame ( $ trace [ 0 ] ) ) { array_shift ( $ trace ) ; } if ( $ needAddFakeFrame ) { $ frame_where_exception_thrown = array ( 'file' => $ e -> getFile ( ) , 'line' => $ e -> getLine ( ) , ) ; array_unshift ( $ trace , $ frame_where_exception_thrown ) ; } $ exc_data [ 'stacktrace' ] = array ( 'frames' => Stacktrace :: get_stack_info ( $ trace , $ this -> trace , $ vars , $ this -> message_limit , $ this -> prefixes , $ this -> app_path , $ this -> excluded_app_paths , $ this -> serializer , $ this -> reprSerializer ) , ) ; $ exceptions [ ] = $ exc_data ; } while ( $ e = $ e -> getPrevious ( ) ) ; $ data [ 'exception' ] = array ( 'values' => array_reverse ( $ exceptions ) , ) ; if ( $ logger !== null ) { $ data [ 'logger' ] = $ logger ; } if ( empty ( $ data [ 'level' ] ) ) { if ( method_exists ( $ eOriginal , 'getSeverity' ) ) { $ data [ 'level' ] = $ this -> translateSeverity ( $ eOriginal -> getSeverity ( ) ) ; } else { $ data [ 'level' ] = self :: ERROR ; } } return $ this -> capture ( $ data , $ trace , $ vars ) ; }
Log an exception to sentry

@param E|DFE $e
@param array $data
Log an exception to sentry