diff --git a/src/LogLib/Classes/Console.php b/src/LogLib/Classes/Console.php index 495ef74..d19fd4b 100644 --- a/src/LogLib/Classes/Console.php +++ b/src/LogLib/Classes/Console.php @@ -10,6 +10,7 @@ use LogLib\Log; use LogLib\Objects\Event; use LogLib\Objects\Options; + use LogLib\Objects\RuntimeOptions; use RuntimeException; use Throwable; @@ -22,18 +23,27 @@ /** * Formats the application name with a color for the console * - * @param string $application The application name + * @param string $application_name The application name * @return string The formatted application name * @throws RuntimeException If unable to generate a random color for the application */ - private static function formatAppColor(string $application): string + private static function formatAppColor(string $application_name): string { - if(!Log::getRuntimeOptions()->displayAnsi()) + if($application_name == null) { - return $application; + $options = Log::getRuntimeOptions(); + } + else + { + $options = Log::getOptions($application_name); } - if(!isset(self::$application_colors[$application])) + if(!$options->displayAnsi()) + { + return $application_name; + } + + if(!isset(self::$application_colors[$application_name])) { $colors = ConsoleColors::BRIGHT_COLORS; @@ -43,25 +53,26 @@ } catch (Exception $e) { - throw new RuntimeException(sprintf('Unable to generate random color for application "%s"', $application), $e->getCode(), $e); + throw new RuntimeException(sprintf('Unable to generate random color for application "%s"', $application_name), $e->getCode(), $e); } - self::$application_colors[$application] = $color; + self::$application_colors[$application_name] = $color; } - return self::color($application, self::$application_colors[$application]); + return self::color($options, $application_name, self::$application_colors[$application_name]); } /** * Applies a specified color to the given text, using ANSI escape sequences. * + * @param RuntimeOptions $options The runtime options object. * @param string $text The text to apply the color to. * @param ConsoleColors $color The ANSI color code to apply to the text. * @return string The text with the specified color applied. */ - private static function color(string $text, ConsoleColors $color): string + private static function color(RuntimeOptions $options, string $text, ConsoleColors $color): string { - if(!Log::getRuntimeOptions()->displayAnsi()) + if(!$options->displayAnsi()) { return $text; } @@ -72,12 +83,13 @@ /** * Colorizes the log message based on the event level using ANSI escape sequences. * + * @param RuntimeOptions $options The runtime options object. * @param Event $event The log event to colorize. * @return string The colorized log message. */ - private static function colorize(Event $event): string + private static function colorize(RuntimeOptions $options, Event $event): string { - if(!Log::getRuntimeOptions()->displayAnsi()) + if(!$options->displayAnsi()) { return Utilities::levelToString($event->getLevel()); } @@ -98,15 +110,16 @@ return Utilities::levelToString($event->getLevel()); } - return self::color(Utilities::levelToString($event->getLevel()), $color); + return self::color($options, Utilities::levelToString($event->getLevel()), $color); } /** * Retrieves the current timestamp as a formatted string. * + * @param RuntimeOptions $options The runtime options object. * @return string The current timestamp. */ - private static function getTimestamp(): string + private static function getTimestamp(RuntimeOptions $options): string { $tick_time = (string)microtime(true); @@ -127,11 +140,11 @@ if ($timeDiff > 1.0) { - $fmt_tick = self::color($tick_time, ConsoleColors::LIGHT_RED); + $fmt_tick = self::color($options, $tick_time, ConsoleColors::LIGHT_RED); } elseif ($timeDiff > 0.5) { - $fmt_tick = self::color($tick_time, ConsoleColors::YELLOW); + $fmt_tick = self::color($options, $tick_time, ConsoleColors::YELLOW); } } @@ -153,38 +166,38 @@ return; } - if(Validate::checkLevelType(LogLevel::DEBUG, Log::getRuntimeOptions()->getLoglevel())) + if(Validate::checkLevelType(LogLevel::DEBUG, $options->getLoglevel())) { - $backtrace_output = Utilities::getTraceString($event, Log::getRuntimeOptions()->displayAnsi()); + $backtrace_output = Utilities::getTraceString($event, $options->displayAnsi()); print(sprintf("[%s] [%s] [%s] %s %s" . PHP_EOL, - self::getTimestamp(), + self::getTimestamp($options), self::formatAppColor($options->getApplicationName()), - self::colorize($event), + self::colorize($options, $event), $backtrace_output, $event->getMessage() )); if($event->getException() !== null) { - self::outException($event->getException()); + self::outException($options, $event->getException()); } return; } - if(Validate::checkLevelType(LogLevel::VERBOSE, Log::getRuntimeOptions()->getLoglevel())) + if(Validate::checkLevelType(LogLevel::VERBOSE, $options->getLoglevel())) { - $backtrace_output = Utilities::getTraceString($event, Log::getRuntimeOptions()->displayAnsi()); + $backtrace_output = Utilities::getTraceString($event, $options->displayAnsi()); print(sprintf("[%s] [%s] %s %s" . PHP_EOL, self::formatAppColor($options->getApplicationName()), - self::colorize($event), + self::colorize($options, $event), $backtrace_output, $event->getMessage() )); if($event->getException() !== null) { - self::outException($event->getException()); + self::outException($options, $event->getException()); } return; @@ -192,7 +205,7 @@ print(sprintf("[%s] [%s] %s" . PHP_EOL, self::formatAppColor($options->getApplicationName()), - self::colorize($event), + self::colorize($options, $event), $event->getMessage() )); } @@ -201,18 +214,19 @@ * Prints information about the given exception, including the error message, error code, * and stack trace. * + * @param RuntimeOptions $options The runtime options object. * @param Throwable|null $exception The exception to print information about. * @return void */ - private static function outException(?Throwable $exception=null): void + private static function outException(RuntimeOptions $options, ?Throwable $exception=null): void { if($exception === null) { return; } - $trace_header = self::color($exception->getFile() . ':' . $exception->getLine(), ConsoleColors::PURPLE); - $trace_error = self::color('error: ', ConsoleColors::RED); + $trace_header = self::color($options, $exception->getFile() . ':' . $exception->getLine(), ConsoleColors::PURPLE); + $trace_error = self::color($options, 'error: ', ConsoleColors::RED); print($trace_header . ' ' . $trace_error . $exception->getMessage() . PHP_EOL); print(sprintf('Error code: %s', $exception->getCode()) . PHP_EOL); @@ -223,7 +237,7 @@ print('Stack Trace:' . PHP_EOL); foreach($trace as $item) { - print( ' - ' . self::color($item['file'], ConsoleColors::RED) . ':' . $item['line'] . PHP_EOL); + print( ' - ' . self::color($options, $item['file'], ConsoleColors::RED) . ':' . $item['line'] . PHP_EOL); } } @@ -231,7 +245,7 @@ { print('Previous Exception:' . PHP_EOL); - self::outException($exception->getPrevious()); + self::outException($options, $exception->getPrevious()); } } } \ No newline at end of file diff --git a/src/LogLib/Log.php b/src/LogLib/Log.php index b7937fc..efc972f 100644 --- a/src/LogLib/Log.php +++ b/src/LogLib/Log.php @@ -109,17 +109,24 @@ /** * Logs a message with a specified application name, level, optional message, and optional throwable. * - * @param string $application_name The name of the application + * @param string|null $application_name The name of the application * @param LogLevel $level The level type of the log (default is LevelType::INFO) * @param string|null $message The message of the log event * @param Throwable|null $throwable The exception that was thrown, if any * @return void */ - private static function log(string $application_name, LogLevel $level=LogLevel::INFO, ?string $message=null, ?Throwable $throwable=null): void + private static function log(?string $application_name, LogLevel $level=LogLevel::INFO, ?string $message=null, ?Throwable $throwable=null): void { - $application = self::getOptions($application_name); + if($application_name === null) + { + $options = self::getRuntimeOptions(); + } + else + { + $options = self::getOptions($application_name); + } - if(!Validate::checkLevelType($level, self::getRuntimeOptions()->getLoglevel())) + if(!Validate::checkLevelType($level, $options->getLoglevel())) { return; } @@ -136,9 +143,9 @@ $event->setBacktrace(Utilities::getBacktrace()); } - if(self::getRuntimeOptions()->isConsoleOutput()) + if($options->isConsoleOutput()) { - Console::out($application, $event); + Console::out($options, $event); } } @@ -218,7 +225,8 @@ */ public static function registerExceptionHandler(): void { - set_exception_handler(static function(Throwable $throwable) { + set_exception_handler(static function(Throwable $throwable) + { self::error('Runtime', $throwable->getMessage(), $throwable); }); } diff --git a/src/LogLib/Objects/Options.php b/src/LogLib/Objects/Options.php index 7774c29..4d16be6 100644 --- a/src/LogLib/Objects/Options.php +++ b/src/LogLib/Objects/Options.php @@ -5,7 +5,7 @@ namespace LogLib\Objects; - class Options + class Options extends RuntimeOptions { /** * @var string @@ -17,8 +17,8 @@ */ public function __construct(string $application_name) { - $this->application_name = $application_name; - } + parent::__construct(); + $this->application_name = $application_name;} /** * Returns the name of the Application @@ -29,5 +29,4 @@ { return $this->application_name; } - } \ No newline at end of file diff --git a/src/LogLib/Objects/RuntimeOptions.php b/src/LogLib/Objects/RuntimeOptions.php index a3c54fc..b3c7ab2 100644 --- a/src/LogLib/Objects/RuntimeOptions.php +++ b/src/LogLib/Objects/RuntimeOptions.php @@ -17,7 +17,6 @@ private LogLevel $fileLoggingLevel; /** - * * @return void */ public function __construct()