diff options
author | Christoph Wurst <christoph@winzerhof-wurst.at> | 2022-05-24 08:39:20 +0200 |
---|---|---|
committer | Christoph Wurst <christoph@winzerhof-wurst.at> | 2022-11-02 09:49:37 +0100 |
commit | 052dcdebe8e2c287933caaac379f56423b1ab660 (patch) | |
tree | 2e7808caffa218ba328f2cec2cebf84d8b7d176e /lib/private/Log | |
parent | 77c6d248825bf1bda5c0bb48a8d6fc195e139bc6 (diff) | |
download | nextcloud-server-052dcdebe8e2c287933caaac379f56423b1ab660.tar.gz nextcloud-server-052dcdebe8e2c287933caaac379f56423b1ab660.zip |
Refactor the ErrorHandler into a dynamic class
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'lib/private/Log')
-rw-r--r-- | lib/private/Log/ErrorHandler.php | 83 |
1 files changed, 38 insertions, 45 deletions
diff --git a/lib/private/Log/ErrorHandler.php b/lib/private/Log/ErrorHandler.php index d56fecb1ecb..5f90c86c24e 100644 --- a/lib/private/Log/ErrorHandler.php +++ b/lib/private/Log/ErrorHandler.php @@ -1,4 +1,7 @@ <?php + +declare(strict_types=1); + /** * @copyright Copyright (c) 2016, ownCloud, Inc. * @@ -27,80 +30,70 @@ */ namespace OC\Log; +use Error; use OCP\ILogger; +use Psr\Log\LoggerInterface; +use Throwable; class ErrorHandler { - /** @var ILogger */ - private static $logger; + private LoggerInterface $logger; + + public function __construct(LoggerInterface $logger) { + $this->logger = $logger; + } /** - * remove password in URLs - * @param string $msg - * @return string + * Remove password in URLs */ - protected static function removePassword($msg) { + private static function removePassword(string $msg): string { return preg_replace('#//(.*):(.*)@#', '//xxx:xxx@', $msg); } - public static function register($debug = false) { - $handler = new ErrorHandler(); - - if ($debug) { - set_error_handler([$handler, 'onAll'], E_ALL); - if (\OC::$CLI) { - set_exception_handler(['OC_Template', 'printExceptionErrorPage']); - } - } else { - set_error_handler([$handler, 'onError']); - } - register_shutdown_function([$handler, 'onShutdown']); - set_exception_handler([$handler, 'onException']); - } - - public static function setLogger(ILogger $logger) { - self::$logger = $logger; - } - - //Fatal errors handler - public static function onShutdown() { + /** + * Fatal errors handler + */ + public function onShutdown(): void { $error = error_get_last(); - if ($error && self::$logger) { - //ob_end_clean(); + if ($error) { $msg = $error['message'] . ' at ' . $error['file'] . '#' . $error['line']; - self::$logger->critical(self::removePassword($msg), ['app' => 'PHP']); + $this->logger->critical(self::removePassword($msg), ['app' => 'PHP']); } } /** - * Uncaught exception handler - * - * @param \Exception $exception + * Uncaught exception handler */ - public static function onException($exception) { + public function onException(Throwable $exception): void { $class = get_class($exception); $msg = $exception->getMessage(); $msg = "$class: $msg at " . $exception->getFile() . '#' . $exception->getLine(); - self::$logger->critical(self::removePassword($msg), ['app' => 'PHP']); + $this->logger->critical(self::removePassword($msg), ['app' => 'PHP']); } - //Recoverable errors handler - public static function onError($number, $message, $file, $line) { + /** + * Recoverable errors handler + */ + public function onError(int $number, string $message, string $file, int $line): bool { if (!(error_reporting() & $number)) { - return; + return true; } $msg = $message . ' at ' . $file . '#' . $line; - $e = new \Error(self::removePassword($msg)); - self::$logger->logException($e, ['app' => 'PHP', 'level' => self::errnoToLogLevel($number)]); + $e = new Error(self::removePassword($msg)); + $this->logger->log(self::errnoToLogLevel($number), $e->getMessage(), ['app' => 'PHP']); + return true; } - //Recoverable handler which catch all errors, warnings and notices - public static function onAll($number, $message, $file, $line) { + /** + * Recoverable handler which catch all errors, warnings and notices + */ + public function onAll(int $number, string $message, string $file, int $line): bool { $msg = $message . ' at ' . $file . '#' . $line; - $e = new \Error(self::removePassword($msg)); - self::$logger->logException($e, ['app' => 'PHP', 'level' => self::errnoToLogLevel($number)]); + $e = new Error(self::removePassword($msg)); + $this->logger->log(self::errnoToLogLevel($number), $e->getMessage(), ['app' => 'PHP']); + return true; } - public static function errnoToLogLevel(int $errno): int { + private static function errnoToLogLevel(int $errno): int { switch ($errno) { case E_USER_WARNING: return ILogger::WARN; |