Added Feature #12093: Improve the error and exception handling.
authorRupert Germann <rupi@gmx.li>
Tue, 20 Oct 2009 21:28:13 +0000 (21:28 +0000)
committerRupert Germann <rupi@gmx.li>
Tue, 20 Oct 2009 21:28:13 +0000 (21:28 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@6200 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
t3lib/config_default.php
t3lib/error/class.t3lib_error_abstractexceptionhandler.php
t3lib/error/class.t3lib_error_debugexceptionhandler.php
t3lib/error/class.t3lib_error_errorhandler.php
t3lib/error/class.t3lib_error_productionexceptionhandler.php
t3lib/error/interface.t3lib_error_errorhandlerinterface.php
typo3/init.php
typo3/sysext/cms/tslib/index_ts.php

index b1081d7..affe360 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -24,6 +24,7 @@
 
 2009-10-20  Rupert Germann  <rupi@gmx.li>
 
+       * Added Feature #12093: Improve the error and exception handling.
        * Fixed bug #12271: List module and Clickmenu should not enable to create inconsistant record-relations (thanks to Tolleiv Nietsch)
        * Fixed bug #12269: List module renders wrong data in localization view when record-overlay was moved in WS (thanks to Tolleiv Nietsch)
        * Fixed bug #8817: Copying Content Elements does not copy Language Overlays (thanks to Tolleiv Nietsch)
index cf377c8..36d23e3 100644 (file)
@@ -157,10 +157,14 @@ $TYPO3_CONF_VARS = Array(
                        )
                ),
                'useCachingFramework' => 0,                             // Boolean: Enable this if you want to use the caching framework by default for the core caches cache_pages, cache_pagesection and cache_hash.
-               'displayErrors' => -1,                                  // Integer, -1,0,1,2. 0=Do not display any PHP error messages. 1=Display error messages. 2=Display only if client matches TYPO3_CONF_VARS[SYS][devIPmask]. -1=Default setting. With this option, you can override the PHP setting "display_errors". It is suggested that you set this to "0" and enable the "error_log" option in php.ini instead.
-               'exceptionHandler'  => 't3lib_error_ProductionExceptionHandler',        // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling, or set to t3lib_error_ProductionExceptionHandler for nice error messages when something wents wrong, or to t3lib_error_DebugExceptionHandler for a complete stack trace of any encountered exception. Note that if devIPmask matches, t3lib_error_DebugExceptionHandler will be used, regardless of this setting.
-               'errorHandler'      => '',      // String: Classname to handle PHP errors. E.g.: t3lib_error_ErrorHandler.This class will turn the error into an exception (to be handled by the exceptionHandler).
-               'exceptionalErrors' => E_ALL ^ E_NOTICE,        // Integer: The E_* constant that will be handled as an exception by t3lib_error_ErrorHandler. Default is "E_ALL ^ E_NOTICE" (6135) and "0" if displayError=0. Some values for errors: E_ALL=6143, E_ALL ^ E_NOTICE ^ E_WARNING=6133. See php documentation for more details on this integer.
+               'displayErrors' => -1,                                  // Integer: -1,0,1,2. Configures whether PHP errors should be displayed. 0 = Do not display any PHP error messages. Overrides the value of “exceptionalErrors” and sets it to 0 (= no errors are turned into exceptions), the configured “productionExceptionHandler” is used as exception handler, 1 = Display error messages with the registered errorhandler. The configured “debugExceptionHandler” is used as exception handler. 2 = Display errors only if client matches TYPO3_CONF_VARS[SYS][devIPmask]. If devIPmask matches the users IP address  the configured “debugExceptionHandler” is used  for exceptions, if not  “productionExceptionHandler” will be used. -1 = Default setting. With this option, you can override the PHP setting "display_errors". If devIPmask matches the users IP address  the configured “debugExceptionHandler” is used  for exceptions, if not “productionExceptionHandler” will be used.
+               'productionExceptionHandler'  => 't3lib_error_ProductionExceptionHandler',      // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling. Default: “t3lib_error_ProductionExceptionHandler”. This exception handler displays a nice error message when something went wrong. The error message is logged to the configured logs. Note: The configured "productionExceptionHandler" is used if displayErrors is set to “0” or to “-1” and devIPmask doesn't match the users IP.
+               'debugExceptionHandler' => 't3lib_error_DebugExceptionHandler',                         // String: Classname to handle exceptions that might happen in the TYPO3-code. Leave empty to disable exception handling. Default: “t3lib_error_DebugExceptionHandler”. This exception handler displays the complete stack trace of any encountered exception. The error message and the stack trace  is logged to the configured logs. Note: The configured "debugExceptionHandler" is used if displayErrors is set to “1” and if displayErrors is “-1”  or “2” and the devIPmask matches the users IP.
+               'errorHandler' => 't3lib_error_ErrorHandler',   // String: Classname to handle PHP errors. E.g.: t3lib_error_ErrorHandler. This class displays and logs all errors that are registered as "errorHandlerErrors" ([SYS][errorHandlerErrors]). Leave empty to disable error handling. Errors can be logged to syslog (see: [SYS][systemLog]) to the installed developer log and to the "syslog" table. If an error is registered in "exceptionalErrors" ([SYS][exceptionalErrors]) it will be turned into an exception to be handled by the configured exceptionHandler.
+               'errorHandlerErrors'=> E_ALL ^ E_NOTICE,        // Integer: The E_* constant that will be handled by the errorhandler. Default is "E_ALL ^ E_NOTICE".
+               'exceptionalErrors' => E_ALL ^ E_NOTICE ^ E_WARNING ^ E_USER_ERROR ^ E_USER_NOTICE ^ E_USER_WARNING,    // Integer: The E_* constant that will be handled as an exception by t3lib_error_ErrorHandler. Default is "E_ALL ^ E_NOTICE ^ E_WARNING ^ E_USER_ERROR ^ E_USER_NOTICE ^ E_USER_WARNING" (4341) and "0" if displayError=0. Some values for errors: E_ALL=6143, E_ALL ^ E_NOTICE ^ E_WARNING=6133. See php documentation for more details on this integer.
+               'enable_errorDLOG' => 0,                                // Boolean: If set, errors are written to the developer log (requires an installed *devlog* extension).
+               'enable_exceptionDLOG' => 0,                    // Boolean: If set, exceptions are written to the developer log (requires an installed *devlog* extension).
        ),
        'EXT' => Array (        // Options related to the Extension Management
                'noEdit' => 1,                                                  // Boolean: If set, the Extension Manager does NOT allow extension files to be edited! (Otherwise both local and global extensions can be edited.)
@@ -486,28 +490,34 @@ function debugEnd() {
 $T3_SERVICES = array();
 
        // Error & exception handling
-$TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] = $TYPO3_CONF_VARS['SYS']['exceptionHandler'];
+$TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] = $TYPO3_CONF_VARS['SYS']['productionExceptionHandler'];
 $TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionalErrors'] = $TYPO3_CONF_VARS['SYS']['exceptionalErrors'];
 
        // Turn error logging on/off.
-if (($displayErrors=intval($TYPO3_CONF_VARS['SYS']['displayErrors']))!='-1')   {
-       if ($displayErrors==2)  {       // Special value "2" enables this feature only if $TYPO3_CONF_VARS[SYS][devIPmask] matches
+if (($displayErrors = intval($TYPO3_CONF_VARS['SYS']['displayErrors'])) != '-1')       {
+       if ($displayErrors == 2)        {       // Special value "2" enables this feature only if $TYPO3_CONF_VARS[SYS][devIPmask] matches
                if (t3lib_div::cmpIP(t3lib_div::getIndpEnv('REMOTE_ADDR'), $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']))    {
-                       $displayErrors=1;
-                       $TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] = 't3lib_error_DebugExceptionHandler';
+                       $displayErrors = 1;
                } else {
-                       $displayErrors=0;
+                       $displayErrors = 0;
                }
        }
        if ($displayErrors == 0)        {
                $TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionalErrors'] = 0;
        }
+       if ($displayErrors == 1) {
+               $TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] = $TYPO3_CONF_VARS['SYS']['debugExceptionHandler'];
+               define('TYPO3_ERRORHANDLER_MODE','debug');
+       }
+
        @ini_set('display_errors', $displayErrors);
 } elseif (t3lib_div::cmpIP(t3lib_div::getIndpEnv('REMOTE_ADDR'), $GLOBALS['TYPO3_CONF_VARS']['SYS']['devIPmask']))     {
                // with displayErrors = -1 (default), turn on debugging if devIPmask matches:
-       $TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] = 't3lib_error_DebugExceptionHandler';
+       $TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] = $TYPO3_CONF_VARS['SYS']['debugExceptionHandler'];
 }
 
+
+
        // Set PHP memory limit depending on value of $TYPO3_CONF_VARS["SYS"]["setMemoryLimit"]
 if(intval($TYPO3_CONF_VARS["SYS"]["setMemoryLimit"])>16) {
        @ini_set('memory_limit',intval($TYPO3_CONF_VARS["SYS"]["setMemoryLimit"]).'m');
@@ -548,6 +558,9 @@ define('TYPO3_UseCachingFramework', (bool)$GLOBALS['TYPO3_CONF_VARS']['SYS']['us
        // Define "TYPO3_DLOG" constant
 define('TYPO3_DLOG', $GLOBALS['TYPO3_CONF_VARS']['SYS']['enable_DLOG']);
 
+define('TYPO3_ERROR_DLOG', $GLOBALS['TYPO3_CONF_VARS']['SYS']['enable_errorDLOG']);
+define('TYPO3_EXCEPTION_DLOG', $GLOBALS['TYPO3_CONF_VARS']['SYS']['enable_exceptionDLOG']);
+
        // Unsetting other reserved global variables:
        // Those which are/can be set in "stddb/tables.php" files:
 unset($PAGES_TYPES);
index 958b6f5..79bc6c7 100644 (file)
@@ -34,6 +34,8 @@
  * @version $Id: AbstractExceptionHandler.php 3189 2009-09-16 13:36:22Z k-fish $
  */
 abstract class t3lib_error_AbstractExceptionHandler implements t3lib_error_ExceptionHandlerInterface, t3lib_Singleton {
+       const CONTEXT_WEB = 'WEB';
+       const CONTEXT_CLI = 'CLI';
 
        /**
         * Displays the given exception
@@ -50,6 +52,82 @@ abstract class t3lib_error_AbstractExceptionHandler implements t3lib_error_Excep
                                $this->echoExceptionWeb($exception);
                }
        }
+
+
+       /**
+        * Writes exception to different logs
+        *
+        * @param Exception $exception The exception
+        * @param string        the context where the exception was thrown, WEB or CLI
+        * @return void
+        * @see t3lib_div::sysLog(), t3lib_div::devLog()
+        */
+       protected function writeLogEntries(Exception $exception, $context) {
+               $filePathAndName = $exception->getFile();
+               $exceptionCodeNumber = ($exception->getCode() > 0) ? '#' . $exception->getCode() . ': ' : '';
+               $logTitle = 'Core: Exception handler (' . $context . ')';
+               $logMessage = 'Uncaught TYPO3 Exception: ' . $exceptionCodeNumber . $exception->getMessage() . ' | ' .
+                       get_class($exception) . ' thrown in file ' . $filePathAndName . ' in line ' . $exception->getLine();
+               $backtrace =  $exception->getTrace();
+
+                       // write error message to the configured syslogs
+               t3lib_div::sysLog($logMessage, $logTitle, 4);
+
+                       // In case an error occurs before a database connection exists, try
+                       // to connect to the DB to be able to write the devlog/sys_log entry
+               if (isset($GLOBALS['TYPO3_DB']) && is_object($GLOBALS['TYPO3_DB']) && empty($GLOBALS['TYPO3_DB']->link)) {
+                       $GLOBALS['TYPO3_DB']->connectDB();
+               }
+
+                       // write error message to devlog
+                       // see: $TYPO3_CONF_VARS['SYS']['enable_exceptionDLOG']
+               if (TYPO3_EXCEPTION_DLOG) {
+                       t3lib_div::devLog($logMessage, $logTitle, 3, array(
+                               'TYPO3_MODE' => TYPO3_MODE,
+                               'backtrace' => $backtrace
+                       ));
+               }
+
+                       // write error message to sys_log table
+               $this->writeLog($logTitle . ': ' . $logMessage);
+       }
+
+       /**
+        * Writes an exception in the sys_log table
+        *
+        * @param       string          Default text that follows the message.
+        * @return      void
+        */
+       protected function writeLog($logMessage) {
+               if (is_object($GLOBALS['TYPO3_DB']) && !empty($GLOBALS['TYPO3_DB']->link)) {
+                       $userId = 0;
+                       $workspace = 0;
+                       if (is_object($GLOBALS['BE_USER'])) {
+                               if (isset($GLOBALS['BE_USER']->user['uid']))    {
+                                       $userId = $GLOBALS['BE_USER']->user['uid'];
+                               }
+                               if (isset($GLOBALS['BE_USER']->workspace))      {
+                                       $workspace = $GLOBALS['BE_USER']->workspace;
+                               }
+                       }
+
+                       $fields_values = Array (
+                               'userid' => $userId,
+                               'type' => 5,
+                               'action' => 0,
+                               'error' => 2,
+                               'details_nr' => 0,
+                               'details' => $logMessage,
+                               'IP' => t3lib_div::getIndpEnv('REMOTE_ADDR'),
+                               'tstamp' => $GLOBALS['EXEC_TIME'],
+                               'workspace' => $workspace
+                       );
+
+                       $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_log', $fields_values);
+               }
+       }
+
+
 }
 
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/error/class.t3lib_error_abstractexceptionhandler.php'])     {
index e9ad066..5ae4ddb 100644 (file)
@@ -70,6 +70,8 @@ class t3lib_error_DebugExceptionHandler extends t3lib_error_AbstractExceptionHan
 //             $moreInformationLink = ($exceptionCodeNumber != '') ? '(<a href="http://typo3.org/go/exception/' . $exception->getCode() . '">More information</a>)' : '';
                $backtraceCode = $this->getBacktraceCode($exception->getTrace());
 
+               $this->writeLogEntries($exception, self::CONTEXT_WEB);
+
                echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
                                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
                        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
@@ -125,8 +127,8 @@ class t3lib_error_DebugExceptionHandler extends t3lib_error_AbstractExceptionHan
         */
        public function echoExceptionCLI(Exception $exception) {
                $filePathAndName = $exception->getFile();
-
                $exceptionCodeNumber = ($exception->getCode() > 0) ? '#' . $exception->getCode() . ': ' : '';
+               $this->writeLogEntries($exception, self::CONTEXT_CLI);
 
                echo "\nUncaught TYPO3 Exception " . $exceptionCodeNumber . $exception->getMessage() . "\n";
                echo "thrown in file " . $filePathAndName . "\n";
index 31830ca..f39070b 100644 (file)
  *
  * @package TYPO3
  * @subpackage t3lib_error
+ * @author Rupert Germann <rupi@gmx.li>
  * @version $Id: ErrorHandler.php 3195 2009-09-17 11:27:14Z k-fish $
  */
 class t3lib_error_ErrorHandler implements t3lib_error_ErrorHandlerInterface {
 
        /**
-        * @var array
+        * Error levels which should result in an exception thrown.
+        *
+        * @var integer
         */
        protected $exceptionalErrors = array();
 
        /**
-        * Defines which error levels result should result in an exception thrown.
         * Registers this class as default error handler
         *
-        * @param integer $exceptionalErrors The integer representing the E_* error level to handle as exceptions
+        * @param integer       The integer representing the E_* error level which should be
+        *                                      handled by the registered error handler.
+        * @return void
+        */
+       public function __construct($errorHandlerErrors) {
+               set_error_handler(array($this, 'handleError'), $errorHandlerErrors);
+       }
+
+
+
+       /**
+        * Defines which error levels should result in an exception thrown.
+        *
+        * @param integer       The integer representing the E_* error level to handle as exceptions
         * @return void
         */
-       public function setErrorHandlerForExceptionalErrors($exceptionalErrors) {
+       public function setExceptionalErrors($exceptionalErrors) {
                $this->exceptionalErrors = (int)$exceptionalErrors;
-               set_error_handler(array($this, 'handleError'), $this->exceptionalErrors);
+
        }
 
        /**
-        * Handles an error by converting it into an exception
+        * Handles an error.
+        * If the error is registered as exceptionalError it will by converted into an exception, to be handled
+        * by the configured exceptionhandler. Additionall the error message is written to the configured logs.
+        * If TYPO3_MODE is 'BE' the error message is also added to the flashMessageQueue, in FE the error message
+        * is displayed in the admin panel (as TsLog message)
         *
-        * @param integer $errorLevel The error level - one of the E_* constants
-        * @param string $errorMessage The error message
-        * @param string $errorFile Name of the file the error occurred in
-        * @param integer $errorLine Line number where the error occurred
+        * @param integer       The error level - one of the E_* constants
+        * @param string        The error message
+        * @param string        Name of the file the error occurred in
+        * @param integer       Line number where the error occurred
         * @return void
-        * @throws t3lib_error_Exception with the data passed to this method
+        * @throws t3lib_error_Exception with the data passed to this method if the error is registered as exceptionalError
         */
        public function handleError($errorLevel, $errorMessage, $errorFile, $errorLine) {
+                       // don't do anything if error_reporting is disabled by an @ sign
                if (error_reporting()==0) { return TRUE; }
+
                $errorLevels = array (
                        E_WARNING            => 'Warning',
                        E_NOTICE             => 'Notice',
@@ -74,12 +95,101 @@ class t3lib_error_ErrorHandler implements t3lib_error_ErrorHandlerInterface {
                        E_RECOVERABLE_ERROR  => 'Catchable Fatal Error'
                );
 
+               $message = 'PHP ' .$errorLevels[$errorLevel] . ': ' . $errorMessage . ' in ' . $errorFile . ' line ' . $errorLine;
+
                if ($errorLevel & $this->exceptionalErrors) {
-                       throw new t3lib_error_Exception($errorLevels[$errorLevel] . ': ' . $errorMessage . ' in ' . $errorFile . ' line ' . $errorLine, 1);
+                       throw new t3lib_error_Exception($message, 1);
+               } else {
+
+                       switch ($errorLevel) {
+                               case E_USER_ERROR:
+                               case E_RECOVERABLE_ERROR:
+                                       $severity = 2;
+                               break;
+                               case E_USER_WARNING:
+                               case E_WARNING:
+                                       $severity = 1;
+                               break;
+                               default:
+                                       $severity = 0;
+                               break;
+                       }
+
+                       $logTitle = 'Core: Error handler (' . TYPO3_MODE . ')';
+
+                               // Write error message to the configured syslogs,
+                               // see: $TYPO3_CONF_VARS['SYS']['systemLog']
+                       t3lib_div::sysLog($message, $logTitle, $severity);
+
+                               // In case an error occurs before a database connection exists, try
+                               // to connect to the DB to be able to write an entry to devlog/sys_log
+                       if (is_object($GLOBALS['TYPO3_DB']) && empty($GLOBALS['TYPO3_DB']->link)) {
+                               $GLOBALS['TYPO3_DB']->connectDB();
+                       }
+
+                               // Write error message to devlog extension(s),
+                               // see: $TYPO3_CONF_VARS['SYS']['enable_errorDLOG']
+                       if (TYPO3_ERROR_DLOG) {
+                               t3lib_div::devLog($message, $logTitle, $severity + 1);
+                       }
+                               // Write error message to TSlog (admin panel)
+                       if (is_object($GLOBALS['TT'])) {
+                               $GLOBALS['TT']->setTSlogMessage($logTitle . ': ' . $message, $severity + 1);
+                       }
+                               // Write error message to sys_log table (ext: belog, Tools->Log)
+                       $this->writeLog($logTitle . ': ' . $message, $severity);
+
+                               // Add error message to the flashmessageQueue
+                       if (TYPO3_ERRORHANDLER_MODE == 'debug') {
+                               $flashMessage = t3lib_div::makeInstance(
+                                               't3lib_FlashMessage',
+                                               $message,
+                                               'PHP ' . $errorLevels[$errorLevel],
+                                               $severity
+                               );
+                               t3lib_FlashMessageQueue::addMessage($flashMessage);
+                       }
                }
+
                        // Don't execute PHP internal error handler
                return TRUE;
        }
+
+       /**
+        * Writes an error in the sys_log table
+        *
+        * @param       string          Default text that follows the message (in english!).
+        * @param       integer         The eror level of the message (0 = OK, 1 = warning, 2 = error)
+        * @return      void
+        */
+       protected function writeLog($logMessage, $severity) {
+               if (is_object($GLOBALS['TYPO3_DB']) && !empty($GLOBALS['TYPO3_DB']->link)) {
+                       $userId = 0;
+                       $workspace = 0;
+                       if (is_object($GLOBALS['BE_USER'])) {
+                               if (isset($GLOBALS['BE_USER']->user['uid']))    {
+                                       $userId = $GLOBALS['BE_USER']->user['uid'];
+                               }
+                               if (isset($GLOBALS['BE_USER']->workspace))      {
+                                       $workspace = $GLOBALS['BE_USER']->workspace;
+                               }
+                       }
+
+                       $fields_values = Array (
+                               'userid' => $userId,
+                               'type' => 5,
+                               'action' => 0,
+                               'error' => $severity,
+                               'details_nr' => 0,
+                               'details' => $logMessage,
+                               'IP' => t3lib_div::getIndpEnv('REMOTE_ADDR'),
+                               'tstamp' => $GLOBALS['EXEC_TIME'],
+                               'workspace' => $workspace
+                       );
+                       $GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_log', $fields_values);
+               }
+       }
+
 }
 
 
index b73c7f7..39d1f3c 100644 (file)
@@ -54,6 +54,7 @@ class t3lib_error_ProductionExceptionHandler extends t3lib_error_AbstractExcepti
                if (!headers_sent()) {
                        header("HTTP/1.1 500 Internal Server Error");
                }
+               $this->writeLogEntries($exception,self::CONTEXT_WEB);
 
                t3lib_timeTrack::debug_typo3PrintError(get_class($exception), $exception->getMessage(), 0, t3lib_div::getIndpEnv('TYPO3_SITE_URL'));
        }
@@ -65,6 +66,7 @@ class t3lib_error_ProductionExceptionHandler extends t3lib_error_AbstractExcepti
         * @return void
         */
        public function echoExceptionCLI(Exception $exception) {
+               $this->writeLogEntries($exception, self::CONTEXT_CLI);
                exit(1);
        }
 }
index 73a025d..d7f817e 100644 (file)
 interface t3lib_error_ErrorHandlerInterface {
 
        /**
-        * Defines which error levels result should result in an exception thrown.
         * Registers this class as default error handler
         *
-        * @param integer $exceptionalErrors The integer representing the E_* error level to handle as exceptions
+        * @param integer       The integer representing the E_* error level which should be
+        *                                      handled by the registered error handler.
         * @return void
         */
-       public function setErrorHandlerForExceptionalErrors($exceptionalErrors);
+       public function __construct($errorHandlerErrors);
 
        /**
-        * Handles an error by converting it into an exception
+        * Defines which error levels should result in an exception thrown.
         *
-        * @param integer $errorLevel The error level - one of the E_* constants
-        * @param string $errorMessage The error message
-        * @param string $errorFile Name of the file the error occurred in
-        * @param integer $errorLine Line number where the error occurred
+        * @param integer       The integer representing the E_* error level to handle as exceptions
         * @return void
-        * @throws t3lib_error_Exception with the data passed to this method
+        */
+       public function setExceptionalErrors($exceptionalErrors);
+
+       /**
+        * Handles an error.
+        * If the error is registered as exceptionalError it will by converted into an exception, to be handled
+        * by the configured exceptionhandler. Additionall the error message is written to the configured logs.
+        * If TYPO3_MODE is 'BE' the error message is also added to the flashMessageQueue, in FE the error message
+        * is displayed in the admin panel (as TsLog message)
+        *
+        * @param integer       The error level - one of the E_* constants
+        * @param string        The error message
+        * @param string        Name of the file the error occurred in
+        * @param integer       Line number where the error occurred
+        * @return void
+        * @throws t3lib_error_Exception with the data passed to this method if the error is registered as exceptionalError
         */
        public function handleError($errorLevel, $errorMessage, $errorFile, $errorLine);
 }
index 09de0a6..95504e7 100644 (file)
@@ -189,9 +189,10 @@ t3lib_autoloader::registerAutoloader();
 // *********************
 if ($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] !== '') {
        if ($TYPO3_CONF_VARS['SYS']['errorHandler'] !== '') {
-               $errorHandler = t3lib_div::makeInstance($TYPO3_CONF_VARS['SYS']['errorHandler']);
-                       // register an error handler for the given exceptionalErrors
-               $errorHandler->setErrorHandlerForExceptionalErrors($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionalErrors']);
+                       //      register an error handler for the given errorHandlerErrors
+               $errorHandler = t3lib_div::makeInstance($TYPO3_CONF_VARS['SYS']['errorHandler'], $TYPO3_CONF_VARS['SYS']['errorHandlerErrors']);
+                       // set errors which will be converted in an exception
+               $errorHandler->setExceptionalErrors($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionalErrors']);
        }
        $exceptionHandler = t3lib_div::makeInstance($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler']);
 }
index 3d4b175..f2e7704 100644 (file)
@@ -133,9 +133,10 @@ $TT->pull();
 if ($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler'] !== '') {
        $TT->push('Register Exceptionhandler', '');
        if ($TYPO3_CONF_VARS['SYS']['errorHandler'] !== '') {
-               $errorHandler = t3lib_div::makeInstance($TYPO3_CONF_VARS['SYS']['errorHandler']);
-                       // register an error handler for the given exceptionalErrors
-               $errorHandler->setErrorHandlerForExceptionalErrors($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionalErrors']);
+                       // register an error handler for the given errorHandlerErrors
+               $errorHandler = t3lib_div::makeInstance($TYPO3_CONF_VARS['SYS']['errorHandler'], $TYPO3_CONF_VARS['SYS']['errorHandlerErrors']);
+                       // set errors which will be converted in an exception
+               $errorHandler->setExceptionalErrors($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionalErrors']);
        }
        $exceptionHandler = t3lib_div::makeInstance($TYPO3_CONF_VARS['SC_OPTIONS']['errors']['exceptionHandler']);
        $TT->pull();