From 6f61db996c3b1a7a523152288cb954f7dfc74f51 Mon Sep 17 00:00:00 2001 From: netkas Date: Mon, 28 Oct 2024 19:56:13 -0400 Subject: [PATCH] Add error and shutdown handlers --- src/LogLib/Classes/Utilities.php | 2 +- src/LogLib/Log.php | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/LogLib/Classes/Utilities.php b/src/LogLib/Classes/Utilities.php index 5bc934c..2ebf9fa 100644 --- a/src/LogLib/Classes/Utilities.php +++ b/src/LogLib/Classes/Utilities.php @@ -345,7 +345,7 @@ $args = Parse::getArguments(); $LOGGING_DIRECTORY = ($args['logging-directory'] ?? getenv('LOGGING_DIRECTORY') ?? null); - if($LOGGING_DIRECTORY === null) + if($LOGGING_DIRECTORY === null || $LOGGING_DIRECTORY === false || strlen($LOGGING_DIRECTORY) === 0) { return sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'logs'; } diff --git a/src/LogLib/Log.php b/src/LogLib/Log.php index d39db82..73b6573 100644 --- a/src/LogLib/Log.php +++ b/src/LogLib/Log.php @@ -4,6 +4,7 @@ namespace LogLib; + use ErrorException; use Exception; use InvalidArgumentException; use LogLib\Classes\Utilities; @@ -223,6 +224,31 @@ return; } }); + + // Register error handler + set_error_handler(static function($errno, $errstr, $errfile, $errline) + { + // Convert error to exception and throw it + try + { + self::warning('Runtime', sprintf("%s:%s (%s) %s", $errfile, $errline, $errno, $errstr)); + } + catch(Exception) + { + return; + } + }); + + register_shutdown_function(static function() + { + $error = error_get_last(); + if ($error !== null && ($error['type'] & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR))) + { + // Convert fatal error to exception and handle it + $exception = new ErrorException($error['message'], 0, $error['type'], $error['file'], $error['line']); + self::error('Fatal', $exception->getMessage(), $exception); + } + }); } /**