Skip to content

Commit

Permalink
更新以便指定捕获的错误级别
Browse files Browse the repository at this point in the history
  • Loading branch information
Kooooooma committed Jun 1, 2017
1 parent fb595e3 commit 5e42947
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 20 deletions.
42 changes: 29 additions & 13 deletions src/PHPErrors.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@
class PHPErrors
{
public $logger;
public static $reportLevel = E_ALL;

public static function enable($errorReportLevel = E_ALL, $devMode = true)
{
if ($errorReportLevel != null) {
error_reporting($errorReportLevel);
self::$reportLevel = $errorReportLevel;
} else {
error_reporting(-1);
error_reporting(E_ALL);
}

if ($devMode) {
Expand Down Expand Up @@ -70,30 +72,44 @@ public function handleFatalError()

if (!empty($error)) {
$type = $error['type'];
$message = $this->formatMessage($error['message'], $error['file'], $error['line']);

return $this->log($type, $message);
if ($type & self::$reportLevel) {
$message = $this->formatMessage($error['message'], $error['file'], $error['line']);

return $this->log($type, $message);
}
}
}

public function handleError($type, $message, $file, $line)
{
$message = $this->formatMessage($message, $file, $line);
if ($type & self::$reportLevel) {
$message = $this->formatMessage($message, $file, $line);

return $this->log($type, $message);
return $this->log($type, $message);
}
}

public function handleException(\Throwable $exception)
{
if ($exception instanceof \Error || $exception instanceof \ErrorException) {
$type = $exception instanceof \Error ? $exception->getCode() : $exception->getSeverity();
$message = $this->formatMessage(
$exception->getMessage(),
$exception->getFile(),
$exception->getLine()
);
//Error code 需要转换成 Exception 的错误级别
//这里把所有的 Error 都转换成 E_ERROR 级别异常, 用来做捕获
if ($exception instanceof \Error) {
$exception = new \ErrorException($exception->getMessage(), 0, E_ERROR, $exception->getFile(), $exception->getLine());
}

return $this->log($type, $message);
if ($exception instanceof \ErrorException) {
$type = $exception->getSeverity();

if ($type & self::$reportLevel) {
$message = $this->formatMessage(
$exception->getMessage(),
$exception->getFile(),
$exception->getLine()
);

return $this->log($type, $message);
}
}
}

Expand Down
14 changes: 7 additions & 7 deletions tests/PHPErrorsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@

require $baseDir.'/vendor/autoload.php';

$errorHandler = \PHPErrors\PHPErrors::enable(E_ALL & E_STRICT, false);
$errorHandler = \PHPErrors\PHPErrors::enable(E_ALL & ~E_ERROR, false);

$logger = new \Monolog\Logger("test");
$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__."/test.log"));

$errorHandler->setLogger($logger);
//$logger = new \Monolog\Logger("test");
//$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__."/test.log"));
//
//$errorHandler->setLogger($logger);


//test error
echo $x;
$fatal->error();
echo $x; //E_NOTICE
$fatal->error(); //E_ERROR

0 comments on commit 5e42947

Please sign in to comment.