[!!!][FEATURE] Introduce PSR-3 Logging
[Packages/TYPO3.CMS.git] / typo3 / sysext / core / Classes / Error / ErrorHandler.php
index 5c01ded..e82acf5 100644 (file)
@@ -40,6 +40,13 @@ class ErrorHandler implements ErrorHandlerInterface, LoggerAwareInterface
     protected $exceptionalErrors = 0;
 
     /**
+     * Error levels which should be handled.
+     *
+     * @var int
+     */
+    protected $errorHandlerErrors = 0;
+
+    /**
      * Whether to write a flash message in case of an error
      *
      * @var bool
@@ -55,8 +62,8 @@ class ErrorHandler implements ErrorHandlerInterface, LoggerAwareInterface
     {
         $excludedErrors = E_COMPILE_WARNING | E_COMPILE_ERROR | E_CORE_WARNING | E_CORE_ERROR | E_PARSE | E_ERROR;
         // reduces error types to those a custom error handler can process
-        $errorHandlerErrors = $errorHandlerErrors & ~$excludedErrors;
-        set_error_handler([$this, 'handleError'], $errorHandlerErrors);
+        $this->errorHandlerErrors = $errorHandlerErrors & ~$excludedErrors;
+        set_error_handler([$this, 'handleError'], $this->errorHandlerErrors);
     }
 
     /**
@@ -96,8 +103,9 @@ class ErrorHandler implements ErrorHandlerInterface, LoggerAwareInterface
      */
     public function handleError($errorLevel, $errorMessage, $errorFile, $errorLine)
     {
-        // Don't do anything if error_reporting is disabled by an @ sign
-        if (error_reporting() === 0) {
+        // Don't do anything if error_reporting is disabled by an @ sign or $errorLevel is something we won't handle
+        $shouldHandleErrorLevel = (bool)($this->errorHandlerErrors & $errorLevel);
+        if (error_reporting() === 0 || !$shouldHandleErrorLevel) {
             return true;
         }
         $errorLevels = [
@@ -139,7 +147,7 @@ class ErrorHandler implements ErrorHandlerInterface, LoggerAwareInterface
             return true;
         }
         if ($this->logger) {
-            $this->logger->log(LogLevel::NOTICE - $severity, $message);
+            $this->logger->log(LogLevel::normalizeLevel(LogLevel::NOTICE) - $severity, $message);
         }
 
         // Write error message to TSlog (admin panel)
@@ -160,16 +168,16 @@ class ErrorHandler implements ErrorHandlerInterface, LoggerAwareInterface
             return false;
         }
         if ($this->debugMode) {
-            /** @var $flashMessage \TYPO3\CMS\Core\Messaging\FlashMessage */
+            /** @var \TYPO3\CMS\Core\Messaging\FlashMessage $flashMessage */
             $flashMessage = GeneralUtility::makeInstance(
-                        \TYPO3\CMS\Core\Messaging\FlashMessage::class,
-                        $message,
-                        $errorLevels[$errorLevel],
-                        $flashMessageSeverity
+                \TYPO3\CMS\Core\Messaging\FlashMessage::class,
+                $message,
+                $errorLevels[$errorLevel],
+                $flashMessageSeverity
                     );
-            /** @var $flashMessageService \TYPO3\CMS\Core\Messaging\FlashMessageService */
+            /** @var \TYPO3\CMS\Core\Messaging\FlashMessageService $flashMessageService */
             $flashMessageService = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Messaging\FlashMessageService::class);
-            /** @var $defaultFlashMessageQueue \TYPO3\CMS\Core\Messaging\FlashMessageQueue */
+            /** @var \TYPO3\CMS\Core\Messaging\FlashMessageQueue $defaultFlashMessageQueue */
             $defaultFlashMessageQueue = $flashMessageService->getMessageQueueByIdentifier();
             $defaultFlashMessageQueue->enqueue($flashMessage);
         }