mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-21 22:32:41 +01:00
PhutilErrorHandler: support multiple error listeners
Summary: Ref T15554. The plan is to add a new listener that will only listen to DEPRECATED events, and do something useful with them. Test Plan: Test script in P26 shows registering 2 handlers and getting both invoked. Reviewers: O1 Blessed Committers, Matthew Reviewed By: O1 Blessed Committers, Matthew Subscribers: Sten, speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno Maniphest Tasks: T15554 Differential Revision: https://we.phorge.it/D25388
This commit is contained in:
parent
5bc53cfe53
commit
25611ba24a
3 changed files with 17 additions and 8 deletions
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* This class takes over the PHP error and exception handlers when you call
|
||||
* ##PhutilErrorHandler::initialize()## and forwards all debugging information
|
||||
* to a listener you install with ##PhutilErrorHandler::setErrorListener()##.
|
||||
* to a listener you install with ##PhutilErrorHandler::addErrorListener()##.
|
||||
*
|
||||
* To use PhutilErrorHandler, which will enhance the messages printed to the
|
||||
* PHP error log, just initialize it:
|
||||
|
@ -16,7 +16,7 @@
|
|||
* To additionally install a custom listener which can print error information
|
||||
* to some other file or console, register a listener:
|
||||
*
|
||||
* PhutilErrorHandler::setErrorListener($some_callback);
|
||||
* PhutilErrorHandler::addErrorListener($some_callback);
|
||||
*
|
||||
* For information on writing an error listener, see
|
||||
* @{function:phutil_error_listener_example}. Providing a listener is optional,
|
||||
|
@ -31,7 +31,7 @@
|
|||
*/
|
||||
final class PhutilErrorHandler extends Phobject {
|
||||
|
||||
private static $errorListener = null;
|
||||
private static $errorListeners = array();
|
||||
private static $initialized = false;
|
||||
private static $traps = array();
|
||||
|
||||
|
@ -68,8 +68,15 @@ final class PhutilErrorHandler extends Phobject {
|
|||
* @return void
|
||||
* @task config
|
||||
*/
|
||||
public static function addErrorListener($listener) {
|
||||
self::$errorListeners[] = $listener;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deprecated - use `addErrorListener`.
|
||||
*/
|
||||
public static function setErrorListener($listener) {
|
||||
self::$errorListener = $listener;
|
||||
self::addErrorListener($listener);
|
||||
}
|
||||
|
||||
|
||||
|
@ -438,7 +445,7 @@ final class PhutilErrorHandler extends Phobject {
|
|||
break;
|
||||
}
|
||||
|
||||
if (self::$errorListener) {
|
||||
if (self::$errorListeners) {
|
||||
static $handling_error;
|
||||
if ($handling_error) {
|
||||
error_log(
|
||||
|
@ -447,7 +454,9 @@ final class PhutilErrorHandler extends Phobject {
|
|||
return;
|
||||
}
|
||||
$handling_error = true;
|
||||
call_user_func(self::$errorListener, $event, $value, $metadata);
|
||||
foreach (self::$errorListeners as $error_listener) {
|
||||
call_user_func($error_listener, $event, $value, $metadata);
|
||||
}
|
||||
$handling_error = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ function phlog($value/* , ... */) {
|
|||
|
||||
/**
|
||||
* Example @{class:PhutilErrorHandler} error listener callback. When you call
|
||||
* `PhutilErrorHandler::setErrorListener()`, you must pass a callback function
|
||||
* `PhutilErrorHandler::addErrorListener()`, you must pass a callback function
|
||||
* with the same signature as this one.
|
||||
*
|
||||
* NOTE: @{class:PhutilErrorHandler} handles writing messages to the error
|
||||
|
|
|
@ -83,7 +83,7 @@ final class PhutilErrorLog
|
|||
}
|
||||
|
||||
public function onError($event, $value, array $metadata) {
|
||||
// If we've set "error_log" to a real file, so messages won't be output to
|
||||
// If we've set "error_log" to a real file, messages won't be output to
|
||||
// stderr by default. Copy them to stderr.
|
||||
|
||||
if ($this->logPath === null) {
|
||||
|
|
Loading…
Reference in a new issue