From 7badba17c318fb65f2993595ca65f55f66bf8dbc Mon Sep 17 00:00:00 2001 From: Juan Pablo Vial Date: Thu, 11 Sep 2025 17:35:02 -0300 Subject: [PATCH] Deprecated log table --- app/common/Implement/Log/Handler/MySQL.php | 48 +++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/app/common/Implement/Log/Handler/MySQL.php b/app/common/Implement/Log/Handler/MySQL.php index adb6d66..8d2bc1c 100644 --- a/app/common/Implement/Log/Handler/MySQL.php +++ b/app/common/Implement/Log/Handler/MySQL.php @@ -11,8 +11,10 @@ class MySQL extends AbstractProcessingHandler { private bool $initialized = false; private PDOStatement $statement; + private PDOStatement $statementDeprecated; - public function __construct(protected Connection $connection, protected int $retainDays = 90, int|string|Level $level = Level::Debug, bool $bubble = true) + public function __construct(protected Connection $connection, protected int $retainDays = 90, + int|string|Level $level = Level::Debug, bool $bubble = true) { parent::__construct($level, $bubble); } @@ -22,9 +24,24 @@ class MySQL extends AbstractProcessingHandler if (!$this->checkTableExists()) { $this->createTable(); } + if (!$this->checkTableDeprecatedExists()) { + $this->createTableDeprecated(); + } $this->cleanup(); + $this->cleanupDeprecated(); $this->initialized(); } + if (str_contains(strtolower($record->message), 'deprecated:')) { + $this->statementDeprecated->execute([ + 'channel' => $record->channel, + 'level' => $record->level->getName(), + 'message' => $record->formatted, + 'time' => $record->datetime->format('Y-m-d H:i:s.u'), + 'context' => (count($record->context) > 0) ? json_encode($record->context, JSON_UNESCAPED_SLASHES) : '', + 'extra' => (count($record->extra) > 0) ? json_encode($record->extra, JSON_UNESCAPED_SLASHES) : '' + ]); + return; + } $this->statement->execute([ 'channel' => $record->channel, 'level' => $record->level->getName(), @@ -42,6 +59,11 @@ INSERT INTO monolog (channel, level, message, time, context, extra) VALUES (:channel, :level, :message, :time, :context, :extra) QUERY; $this->statement = $this->connection->getPDO()->prepare($query); + $query = <<statementDeprecated = $this->connection->getPDO()->prepare($query); $this->initialized = true; } private function checkTableExists(): bool @@ -50,6 +72,12 @@ QUERY; $result = $this->connection->query($query); return $result->rowCount() > 0; } + private function checkTableDeprecatedExists(): bool + { + $query = "SHOW TABLES LIKE 'monolog_deprecated'"; + $result = $this->connection->query($query); + return $result->rowCount() > 0; + } private function createTable(): void { $query = <<connection->getPDO()->exec($query); } + private function createTableDeprecated(): void + { + $query = <<connection->query($query); } + private function cleanupDeprecated(): void + { + $query = "DELETE FROM monolog_deprecated WHERE time < DATE_SUB(CURDATE(), INTERVAL {$this->retainDays} DAY)"; + } }