• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

extending Xenforo_Error::logException

#1
I want to log server errors with new relic and am trying to extend the Xenforo_Error::logException method to do that however it doesn't appear that my extended error class is ever used. I've added so tracing code in the ::logException method but it doesn't get executed. Is it not possible to extend this class with the proxy system or it there some other way I should do this?

Code:
class Rivals_Analytics_NewRelic_Error extends XFCP_Rivals_Analytics_NewRelic_Error
{
    /**
    * Log exceptions to New Relic as well as the server log
    */
    public static function logException(Exception $e, $rollbackTransactions = true, $messagePrefix = '')
    {
        newrelic_notice_error($e->getMessage(), $e);
        parent::logException($e, $rollbackTransactions, $messagePrefix);
    }
}
I have the code event listener for the load_class event thus:

Code:
    public static function loadClass($class, array &$extend)
    {
        switch ($class)
        {
            case 'XenForo_Error':    // Exception and error reporting
                $extend[] = 'Rivals_Analytics_NewRelic_Error';
                break;
        }
    }
 

Robust

Well-known member
#2
XenForo_Error isn't a class you can extend, I believe.

To be sure, create a listener with the hint 'XenForo_Error' and extend that, then it'll only call for XenForo_Error - if that doesn't work then it's not one of them. I wouldn't imagine it is, btw.
 

Chris D

XenForo developer
Staff member
#3
Well, logException is a static method so none of the load_class methods will extend it because that event specifically fires when resolveDynamicClass is called on a class; and we only usually call that when we want to instantiate a class as an object, e.g.
PHP:
$class = XenForo_Application::resolveDynamicClass($class);
$object = new $class();
So it's not really possible to extend that.