diff --git a/kiri-engine/Abstracts/BaseApplication.php b/kiri-engine/Abstracts/BaseApplication.php index 0b0a06f9..3f516473 100644 --- a/kiri-engine/Abstracts/BaseApplication.php +++ b/kiri-engine/Abstracts/BaseApplication.php @@ -17,7 +17,6 @@ use Kiri\Events\EventInterface; use Kiri\Di\LocalService; use Kiri\Config\ConfigProvider; use Kiri\Exception\{InitException}; -use Monolog\Handler\StreamHandler; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; @@ -90,12 +89,6 @@ abstract class BaseApplication extends Component public function mapping(ConfigProvider $config): void { $this->container->bind(LoggerInterface::class, $logger = new Logger($config->get('id'))); - $levels = \config('log.level', self::LOGGER_LEVELS); - - foreach ($levels as $level) { - $logger->pushHandler(new StreamHandler(APP_PATH . 'storage/logs/' . Logger::getLevelName($level) . '/' . date('Y-m-d') . '.log', $level)); - } - foreach ($config->get('mapping', []) as $interface => $class) { $this->container->set($interface, $class); } diff --git a/kiri-engine/Error/StdoutLogger.php b/kiri-engine/Error/StdoutLogger.php index a0b20afe..8abf057c 100644 --- a/kiri-engine/Error/StdoutLogger.php +++ b/kiri-engine/Error/StdoutLogger.php @@ -4,17 +4,30 @@ declare(strict_types=1); namespace Kiri\Error; +use Kiri\Abstracts\BaseApplication; +use Kiri\Application; +use Kiri\Di\Inject\Container; +use Monolog\Handler\StreamHandler; +use Monolog\Logger; use Psr\Log\LoggerInterface; use ReflectionException; + +/** + * @see LoggerInterface + */ class StdoutLogger { - /** - * @var array - */ - private array $errors = []; + /** + * @var array + */ + private array $errors = []; + + + #[Container(Logger::class)] + public Logger $logger; /** @@ -23,26 +36,52 @@ class StdoutLogger * @return bool * @throws ReflectionException */ - public function failure($message, string $model = 'app'): bool - { - if ($message instanceof \Exception) { - $this->errors[$model] = $message->getMessage(); - } else { - $this->errors[$model] = $message; + public function failure($message, string $model = 'app'): bool + { + if ($message instanceof \Exception) { + $this->errors[$model] = $message->getMessage(); + } else { + $this->errors[$model] = $message; } $logger = \Kiri::getDi()->get(LoggerInterface::class); $logger->error(throwable($message), []); return false; - } + } - /** - * @param string $model - * @return mixed - */ - public function getLastError(string $model = 'app'): mixed - { - return $this->errors[$model] ?? 'Unknown error.'; - } + /** + * @param string $name + * @param array $arguments + * @return void + * @throws ReflectionException + */ + public function __call(string $name, array $arguments) + { + // TODO: Implement __call() method. + if (!isset($arguments[2])) { + $arguments[2] = []; + } + [$level, $message, $context] = $arguments; + + $levels = \config('log.level', BaseApplication::LOGGER_LEVELS); + if (!in_array($level, $levels)) { + return; + } + if (!$this->logger->isHandling($level)) { + $path = APP_PATH . 'storage/logs/' . strtolower(Logger::getLevelName($level)) . '/' . date('Y-m-d') . '.log'; + $this->logger->pushHandler(new StreamHandler($path, $level)); + } + $this->logger->{$name}($level, $message, $context); + } + + + /** + * @param string $model + * @return mixed + */ + public function getLastError(string $model = 'app'): mixed + { + return $this->errors[$model] ?? 'Unknown error.'; + } }