From 865ecc87963dc3b26e66296616eef2a1cc41ac3f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 25 Oct 2023 12:55:09 +0300 Subject: move to psr-4 autoloader --- classes/Logger.php | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 classes/Logger.php (limited to 'classes/Logger.php') diff --git a/classes/Logger.php b/classes/Logger.php new file mode 100644 index 000000000..ef6173a42 --- /dev/null +++ b/classes/Logger.php @@ -0,0 +1,89 @@ + 'E_ERROR', + 2 => 'E_WARNING', + 4 => 'E_PARSE', + 8 => 'E_NOTICE', + 16 => 'E_CORE_ERROR', + 32 => 'E_CORE_WARNING', + 64 => 'E_COMPILE_ERROR', + 128 => 'E_COMPILE_WARNING', + 256 => 'E_USER_ERROR', + 512 => 'E_USER_WARNING', + 1024 => 'E_USER_NOTICE', + 2048 => 'E_STRICT', + 4096 => 'E_RECOVERABLE_ERROR', + 8192 => 'E_DEPRECATED', + 16384 => 'E_USER_DEPRECATED', + 32767 => 'E_ALL']; + + static function log_error(int $errno, string $errstr, string $file, int $line, string $context): bool { + return self::get_instance()->_log_error($errno, $errstr, $file, $line, $context); + } + + private function _log_error(int $errno, string $errstr, string $file, int $line, string $context): bool { + //if ($errno == E_NOTICE) return false; + + if ($this->adapter) + return $this->adapter->log_error($errno, $errstr, $file, $line, $context); + else + return false; + } + + static function log(int $errno, string $errstr, string $context = ""): bool { + return self::get_instance()->_log($errno, $errstr, $context); + } + + private function _log(int $errno, string $errstr, string $context = ""): bool { + if ($this->adapter) + return $this->adapter->log_error($errno, $errstr, '', 0, $context); + else + return user_error($errstr, $errno); + } + + private function __clone() { + // + } + + function __construct() { + switch (Config::get(Config::LOG_DESTINATION)) { + case self::LOG_DEST_SQL: + $this->adapter = new Logger_SQL(); + break; + case self::LOG_DEST_SYSLOG: + $this->adapter = new Logger_Syslog(); + break; + case self::LOG_DEST_STDOUT: + $this->adapter = new Logger_Stdout(); + break; + default: + $this->adapter = null; + } + + if ($this->adapter && !implements_interface($this->adapter, "Logger_Adapter")) + user_error("Adapter for LOG_DESTINATION: " . Config::LOG_DESTINATION . " does not implement required interface.", E_USER_ERROR); + } + + private static function get_instance() : Logger { + if (self::$instance == null) + self::$instance = new self(); + + return self::$instance; + } + + static function get() : Logger { + user_error("Please don't use Logger::get(), call Logger::log(...) instead.", E_USER_DEPRECATED); + return self::get_instance(); + } +} -- cgit v1.2.3