Fully log exceptions within ResourceLoader (including traces)

Change-Id: Icb479c76cd855244429fe65b29667783dcca8f53
This commit is contained in:
Aaron Schulz 2013-09-06 11:52:34 -07:00 committed by Krinkle
parent 46f74ea958
commit c28251a9fd
2 changed files with 23 additions and 9 deletions

View 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.

View 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