exception: Prefix error type in front of error message
authorTimo Tijhof <krinklemail@gmail.com>
Sun, 16 Nov 2014 15:08:29 +0000 (16:08 +0100)
committerBryanDavis <bdavis@wikimedia.org>
Mon, 24 Nov 2014 18:23:09 +0000 (18:23 +0000)
Follows-up 399ba2fecf which didn't include any translation of the error
type in the logged message (e.g. "PHP Notice" or "PHP Warning").

Before
 Error from line 2130 of mediawiki/includes/OutputPage.php: Undefined variable: bar
 Error from line 2130 of mediawiki/includes/OutputPage.php: strpos() expects at le..

After
 Error from line 2130 of mediawiki/includes/OutputPage.php: PHP Notice: Undefined variable: bar
 Error from line 2130 of mediawiki/includes/OutputPage.php: PHP Warning: strpos() expects at le..

Based on the log formatter in php
 https://github.com/php/php-src/blob/0f5858e3a328/main/main.c#L1086-L1119

Change-Id: I52f98e52caa64955050ed73e1acbc78b1116a9fd

includes/exception/MWExceptionHandler.php

index 0d90e66..9db04cb 100644 (file)
@@ -167,7 +167,39 @@ class MWExceptionHandler {
         * @param int $line
         */
        public static function handleError( $level, $message, $file = null, $line = null ) {
-               $e = new ErrorException( $message, 0, $level, $file, $line );
+               // Map error constant to error name (reverse-engineer PHP error reporting)
+               switch ( $level ) {
+                       case E_ERROR:
+                       case E_CORE_ERROR:
+                       case E_COMPILE_ERROR:
+                       case E_USER_ERROR:
+                       case E_RECOVERABLE_ERROR:
+                       case E_PARSE:
+                               $levelName = 'Error';
+                               break;
+                       case E_WARNING:
+                       case E_CORE_WARNING:
+                       case E_COMPILE_WARNING:
+                       case E_USER_WARNING:
+                               $levelName = 'Warning';
+                               break;
+                       case E_NOTICE:
+                       case E_USER_NOTICE:
+                               $levelName = 'Notice';
+                               break;
+                       case E_STRICT:
+                               $levelName = 'Strict Standards';
+                               break;
+                       case E_DEPRECATED:
+                       case E_USER_DEPRECATED:
+                               $levelName = 'Deprecated';
+                               break;
+                       default:
+                               $levelName = 'Unknown error';
+                               break;
+               }
+
+               $e = new ErrorException( "PHP $levelName: $message", 0, $level, $file, $line );
                self::logError( $e );
 
                // This handler is for logging only. Return false will instruct PHP