Merge "RevisionStoreDbTestBase, remove redundant needsDB override"
[lhc/web/wiklou.git] / includes / exception / MWExceptionHandler.php
index 79f0a23..bd823b5 100644 (file)
@@ -161,8 +161,8 @@ class MWExceptionHandler {
         *
         * @param int $level Error level raised
         * @param string $message
-        * @param string $file
-        * @param int $line
+        * @param string|null $file
+        * @param int|null $line
         * @return bool
         *
         * @see logError()
@@ -173,13 +173,24 @@ class MWExceptionHandler {
                global $wgPropagateErrors;
 
                if ( in_array( $level, self::$fatalErrorTypes ) ) {
-                       return call_user_func_array(
-                               'MWExceptionHandler::handleFatalError', func_get_args()
-                       );
+                       return self::handleFatalError( ...func_get_args() );
                }
 
-               // Map error constant to error name (reverse-engineer PHP error
-               // reporting)
+               // Map PHP error constant to a PSR-3 severity level.
+               // Avoid use of "DEBUG" or "INFO" levels, unless the
+               // error should evade error monitoring and alerts.
+               //
+               // To decide the log level, ask yourself: "Has the
+               // program's behaviour diverged from what the written
+               // code expected?"
+               //
+               // For example, use of a deprecated method or violating a strict standard
+               // has no impact on functional behaviour (Warning). On the other hand,
+               // accessing an undefined variable makes behaviour diverge from what the
+               // author intended/expected. PHP recovers from an undefined variables by
+               // yielding null and continuing execution, but it remains a change in
+               // behaviour given the null was not part of the code and is likely not
+               // accounted for.
                switch ( $level ) {
                        case E_RECOVERABLE_ERROR:
                                $levelName = 'Error';
@@ -188,23 +199,27 @@ class MWExceptionHandler {
                        case E_WARNING:
                        case E_CORE_WARNING:
                        case E_COMPILE_WARNING:
-                       case E_USER_WARNING:
                                $levelName = 'Warning';
-                               $severity = LogLevel::WARNING;
+                               $severity = LogLevel::ERROR;
                                break;
                        case E_NOTICE:
-                       case E_USER_NOTICE:
                                $levelName = 'Notice';
-                               $severity = LogLevel::INFO;
+                               $severity = LogLevel::ERROR;
+                               break;
+                       case E_USER_WARNING:
+                       case E_USER_NOTICE:
+                               // Used by wfWarn(), MWDebug::warning()
+                               $levelName = 'Warning';
+                               $severity = LogLevel::WARNING;
                                break;
                        case E_STRICT:
                                $levelName = 'Strict Standards';
-                               $severity = LogLevel::DEBUG;
+                               $severity = LogLevel::WARNING;
                                break;
                        case E_DEPRECATED:
                        case E_USER_DEPRECATED:
                                $levelName = 'Deprecated';
-                               $severity = LogLevel::INFO;
+                               $severity = LogLevel::WARNING;
                                break;
                        default:
                                $levelName = 'Unknown error';
@@ -233,12 +248,12 @@ class MWExceptionHandler {
         *
         * @since 1.25
         *
-        * @param int $level Error level raised
-        * @param string $message Error message
-        * @param string $file File that error was raised in
-        * @param int $line Line number error was raised at
-        * @param array $context Active symbol table point of error
-        * @param array $trace Backtrace at point of error (undocumented HHVM
+        * @param int|null $level Error level raised
+        * @param string|null $message Error message
+        * @param string|null $file File that error was raised in
+        * @param int|null $line Line number error was raised at
+        * @param array|null $context Active symbol table point of error
+        * @param array|null $trace Backtrace at point of error (undocumented HHVM
         *     feature)
         * @return bool Always returns false
         */