initialized) { if (!$this->checkTableExists()) { $this->createTable(); } $this->cleanup(); $this->initialized(); } $this->statement->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) : '' ]); } private function initialized(): void { $query = <<statement = $this->connection->getPDO()->prepare($query); $this->initialized = true; } private function checkTableExists(): bool { $query = "SHOW TABLES LIKE 'monolog'"; $result = $this->connection->query($query); return $result->rowCount() > 0; } private function createTable(): void { $query = <<connection->getPDO()->exec($query); } private function cleanup(): void { $query = "DELETE FROM monolog WHERE time < DATE_SUB(CURDATE(), INTERVAL {$this->retainDays} DAY)"; $this->connection->query($query); } }