Skip to content

Commit

Permalink
Fix and optimize error handling in console execution and request hand…
Browse files Browse the repository at this point in the history
…ler context
  • Loading branch information
wagnert committed Apr 25, 2018
1 parent a0546ba commit 8afcb79
Show file tree
Hide file tree
Showing 10 changed files with 459 additions and 275 deletions.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
Version 1.1.5-beta6

## Bugfixes

* Fix and optimize error handling in console execution and request handler context

## Features

* None

Version 1.1.5-beta5

## Bugfixes
Expand Down
2 changes: 1 addition & 1 deletion build.default.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
;--------------------------------------------------------------------------------

; ---- Module Release Settings --------------------------------------------------
release.version = 1.1.5-beta5
release.version = 1.1.5-beta6
release.name = Iron Knight

; ---- PHPCPD Settings ----------------------------------------------------------
Expand Down
21 changes: 18 additions & 3 deletions src/AppserverIo/Appserver/Console/ExecutionContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
use AppserverIo\Psr\Servlet\SessionUtils;
use AppserverIo\Psr\Application\ApplicationInterface;
use AppserverIo\Appserver\Core\Environment;
use AppserverIo\Appserver\Core\Utilities\ErrorUtil;
use AppserverIo\Appserver\Core\Utilities\LoggerUtils;
use AppserverIo\Appserver\Core\Utilities\EnvironmentKeys;
use AppserverIo\Appserver\ServletEngine\Utils\ErrorUtil;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

Expand Down Expand Up @@ -158,7 +158,17 @@ public function write(ConnectionInterface $connection)
*/
public function errorHandler($errno, $errstr, $errfile, $errline)
{
LoggerUtils::log(LogLevel::ERROR, sprintf('PHP %s: %s in %s on line %d', ErrorUtil::singleton()->mapErrorCode($errno), $errstr, $errfile, $errline));

// query whether or not we've to handle the passed error
if ($errno > error_reporting()) {
return true;
}

// add the passed error information to the array with the errors
$error = ErrorUtil::singleton()->fromArray(array($errno, $errstr, $errfile, $errline));
// log the error messge and return TRUE, to prevent execution of additinoal error handlers
LoggerUtils::log(LogLevel::ERROR, ErrorUtil::singleton()->prepareMessage($error));
return true;
}

/**
Expand All @@ -169,8 +179,13 @@ public function errorHandler($errno, $errstr, $errfile, $errline)
*/
public function shutdown()
{

// query whether or not, class has been shutdown by an unhandled error
if ($lastError = error_get_last()) {
LoggerUtils::log(LogLevel::ERROR, $lastError);
// add the passed error information to the array with the errors
$error = ErrorUtil::singleton()->fromArray($lastError);
// log the error messge and return TRUE, to prevent execution of additinoal error handlers
LoggerUtils::log(LogLevel::ERROR, ErrorUtil::singleton()->prepareMessage($error));
}
}
}
118 changes: 118 additions & 0 deletions src/AppserverIo/Appserver/Core/Utilities/Error.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
<?php

/**
* AppserverIo\Appserver\Core\Utilities\Error
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
*
* PHP version 5
*
* @author Tim Wagner <tw@appserver.io>
* @copyright 2015 TechDivision GmbH <info@appserver.io>
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @link https://github.com/appserver-io/appserver
* @link http://www.appserver.io
*/

namespace AppserverIo\Appserver\Core\Utilities;

/**
* Wrapper for an error triggered by PHP's default error handling.
*
* @author Tim Wagner <tw@appserver.io>
* @copyright 2015 TechDivision GmbH <info@appserver.io>
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @link https://github.com/appserver-io/appserver
* @link http://www.appserver.io
*/
class Error implements ErrorInterface
{

/**
* The error type.
*
* @var integer
*/
protected $type;

/**
* The error message.
*
* @var integer
*/
protected $message;

/**
* The name of the file where the error has been triggered.
*
* @var integer
*/
protected $file;

/**
* The line in the file where the error has been triggered.
*
* @var integer
*/
protected $line;

/**
* Initializes the error with the passed values.
*
* @param integer $type The error type
* @param string $message The error message
* @param string $file The name of the file where the error has been triggered
* @param integer $line The line in the file where the error has been triggered
*/
public function __construct($type, $message, $file, $line)
{
$this->type = $type;
$this->message = $message;
$this->file = $file;
$this->line = $line;
}

/**
* Return's the error type.
*
* @return integer The error type
*/
public function getType()
{
return $this->type;
}

/**
* Return's the error message.
*
* @return integer The error message
*/
public function getMessage()
{
return $this->message;
}

/**
* Return's the name of the file where the error has been triggered.
*
* @return integer The filename
*/
public function getFile()
{
return $this->file;
}

/**
* Return's the line in the file where the error has been triggered.
*
* @return integer The line number
*/
public function getLine()
{
return $this->line;
}
}
62 changes: 62 additions & 0 deletions src/AppserverIo/Appserver/Core/Utilities/ErrorInterface.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?php

/**
* AppserverIo\Appserver\Core\Utilities\ErrorInterface
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
*
* PHP version 5
*
* @author Tim Wagner <tw@appserver.io>
* @copyright 2015 TechDivision GmbH <info@appserver.io>
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @link https://github.com/appserver-io/appserver
* @link http://www.appserver.io
*/

namespace AppserverIo\Appserver\Core\Utilities;

/**
* Interface for wrapper implementations of errors triggered by PHP's default error handling.
*
* @author Tim Wagner <tw@appserver.io>
* @copyright 2015 TechDivision GmbH <info@appserver.io>
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @link https://github.com/appserver-io/appserver
* @link http://www.appserver.io
*/
interface ErrorInterface
{

/**
* Return's the error type.
*
* @return integer The error type
*/
public function getType();

/**
* Return's the error message.
*
* @return integer The error message
*/
public function getMessage();

/**
* Return's the name of the file where the error has been triggered.
*
* @return integer The filename
*/
public function getFile();

/**
* Return's the line in the file where the error has been triggered.
*
* @return integer The line number
*/
public function getLine();
}

0 comments on commit 8afcb79

Please sign in to comment.