Fully log exceptions within ResourceLoader (including traces)
authorAaron Schulz <aschulz@wikimedia.org>
Fri, 6 Sep 2013 18:52:34 +0000 (11:52 -0700)
committerKrinkle <krinklemail@gmail.com>
Wed, 18 Sep 2013 16:30:18 +0000 (16:30 +0000)
Change-Id: Icb479c76cd855244429fe65b29667783dcca8f53

includes/Exception.php
includes/resourceloader/ResourceLoader.php

index dc1208a..e1bfb2d 100644 (file)
@@ -247,16 +247,9 @@ class MWException extends Exception {
         * It will be either HTML or plain text based on isCommandLine().
         */
        function report() {
-               global $wgLogExceptionBacktrace, $wgMimeType;
-               $log = $this->getLogMessage();
+               global $wgMimeType;
 
-               if ( $log ) {
-                       if ( $wgLogExceptionBacktrace ) {
-                               wfDebugLog( 'exception', $log . "\n" . $this->getTraceAsString() . "\n" );
-                       } else {
-                               wfDebugLog( 'exception', $log );
-                       }
-               }
+               $this->logException();
 
                if ( defined( 'MW_API' ) ) {
                        // Unhandled API exception, we can't be sure that format printer is alive
@@ -273,6 +266,22 @@ class MWException extends Exception {
                }
        }
 
+       /**
+        * Log the error message to the exception log (if enabled)
+        */
+       function logException() {
+               global $wgLogExceptionBacktrace;
+
+               $log = $this->getLogMessage();
+               if ( $log ) {
+                       if ( $wgLogExceptionBacktrace ) {
+                               wfDebugLog( 'exception', $log . "\n" . $this->getTraceAsString() . "\n" );
+                       } else {
+                               wfDebugLog( 'exception', $log );
+                       }
+               }
+       }
+
        /**
         * Check whether we are in command line mode or not to report the exception
         * in the correct format.
index ff3ea35..3088370 100644 (file)
@@ -177,6 +177,7 @@ class ResourceLoader {
                        // Save filtered text to Memcached
                        $cache->set( $key, $result );
                } catch ( Exception $exception ) {
+                       $exception->logException();
                        wfDebugLog( 'resourceloader', __METHOD__ . ": minification failed: $exception" );
                        $this->hasErrors = true;
                        // Return exception as a comment
@@ -474,6 +475,7 @@ class ResourceLoader {
                try {
                        $this->preloadModuleInfo( array_keys( $modules ), $context );
                } catch ( Exception $e ) {
+                       $e->logException();
                        wfDebugLog( 'resourceloader', __METHOD__ . ": preloading module info failed: $e" );
                        $this->hasErrors = true;
                        // Add exception to the output as a comment
@@ -493,6 +495,7 @@ class ResourceLoader {
                                // Calculate maximum modified time
                                $mtime = max( $mtime, $module->getModifiedTime( $context ) );
                        } catch ( Exception $e ) {
+                               $e->logException();
                                wfDebugLog( 'resourceloader', __METHOD__ . ": calculating maximum modified time failed: $e" );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment
@@ -727,6 +730,7 @@ class ResourceLoader {
                        try {
                                $blobs = MessageBlobStore::get( $this, $modules, $context->getLanguage() );
                        } catch ( Exception $e ) {
+                               $e->logException();
                                wfDebugLog( 'resourceloader', __METHOD__ . ": pre-fetching blobs from MessageBlobStore failed: $e" );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment
@@ -834,6 +838,7 @@ class ResourceLoader {
                                                break;
                                }
                        } catch ( Exception $e ) {
+                               $e->logException();
                                wfDebugLog( 'resourceloader', __METHOD__ . ": generating module package failed: $e" );
                                $this->hasErrors = true;
                                // Add exception to the output as a comment