*/ class FileSystemDriver implements Driver { public function __construct( private readonly string $directory, ) {} /** * Logs a serialized message to a file. The log file is created on a daily basis. * If the required directory or log file does not exist, they are created. * Ensures that the log file is writable before attempting to write the message. * * @param string $serializedMessage The message to be logged, serialized as a string. * @return void * @throws \RuntimeException If the log file or directory cannot be created, or if the log file is not writable. */ public function log(string $serializedMessage): void { $date = new DateTime(); $file_name = "{$date->format('Y-m-d')}.log"; $path = $this->directory . DIRECTORY_SEPARATOR . $file_name; // If the log file does not exist, try creating one if (!$this->exists($path)) { throw new \RuntimeException('Log file could not be created at path: ' . $path); } // We managed to get this far, but still can't write to the log file if (!$this->isWriteable($path)) { throw new \RuntimeException('Log file is not writeable at path: ' . $path); } $this->write($path, $serializedMessage . PHP_EOL); } public function exists(string $path): bool { return file_exists($path); } public function isWriteable(string $path): bool { return is_writeable($path); } public function write(string $path, string $data): void { file_put_contents( filename: $path, data: $data, flags: FILE_APPEND ); } }