Skip to content

Commit 5e42947

Browse files
committed
更新以便指定捕获的错误级别
1 parent fb595e3 commit 5e42947

File tree

2 files changed

+36
-20
lines changed

2 files changed

+36
-20
lines changed

src/PHPErrors.php

+29-13
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
class PHPErrors
1717
{
1818
public $logger;
19+
public static $reportLevel = E_ALL;
1920

2021
public static function enable($errorReportLevel = E_ALL, $devMode = true)
2122
{
2223
if ($errorReportLevel != null) {
2324
error_reporting($errorReportLevel);
25+
self::$reportLevel = $errorReportLevel;
2426
} else {
25-
error_reporting(-1);
27+
error_reporting(E_ALL);
2628
}
2729

2830
if ($devMode) {
@@ -70,30 +72,44 @@ public function handleFatalError()
7072

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

75-
return $this->log($type, $message);
76+
if ($type & self::$reportLevel) {
77+
$message = $this->formatMessage($error['message'], $error['file'], $error['line']);
78+
79+
return $this->log($type, $message);
80+
}
7681
}
7782
}
7883

7984
public function handleError($type, $message, $file, $line)
8085
{
81-
$message = $this->formatMessage($message, $file, $line);
86+
if ($type & self::$reportLevel) {
87+
$message = $this->formatMessage($message, $file, $line);
8288

83-
return $this->log($type, $message);
89+
return $this->log($type, $message);
90+
}
8491
}
8592

8693
public function handleException(\Throwable $exception)
8794
{
88-
if ($exception instanceof \Error || $exception instanceof \ErrorException) {
89-
$type = $exception instanceof \Error ? $exception->getCode() : $exception->getSeverity();
90-
$message = $this->formatMessage(
91-
$exception->getMessage(),
92-
$exception->getFile(),
93-
$exception->getLine()
94-
);
95+
//Error code 需要转换成 Exception 的错误级别
96+
//这里把所有的 Error 都转换成 E_ERROR 级别异常, 用来做捕获
97+
if ($exception instanceof \Error) {
98+
$exception = new \ErrorException($exception->getMessage(), 0, E_ERROR, $exception->getFile(), $exception->getLine());
99+
}
95100

96-
return $this->log($type, $message);
101+
if ($exception instanceof \ErrorException) {
102+
$type = $exception->getSeverity();
103+
104+
if ($type & self::$reportLevel) {
105+
$message = $this->formatMessage(
106+
$exception->getMessage(),
107+
$exception->getFile(),
108+
$exception->getLine()
109+
);
110+
111+
return $this->log($type, $message);
112+
}
97113
}
98114
}
99115

tests/PHPErrorsTest.php

+7-7
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

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

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

8-
$logger = new \Monolog\Logger("test");
9-
$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__."/test.log"));
10-
11-
$errorHandler->setLogger($logger);
8+
//$logger = new \Monolog\Logger("test");
9+
//$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__."/test.log"));
10+
//
11+
//$errorHandler->setLogger($logger);
1212

1313

1414
//test error
15-
echo $x;
16-
$fatal->error();
15+
echo $x; //E_NOTICE
16+
$fatal->error(); //E_ERROR

0 commit comments

Comments
 (0)