diff --git a/src/Concerns/LogReader/KeepsInstances.php b/src/Concerns/LogReader/KeepsInstances.php index 5ebc31ce..8e4760e1 100644 --- a/src/Concerns/LogReader/KeepsInstances.php +++ b/src/Concerns/LogReader/KeepsInstances.php @@ -23,12 +23,22 @@ public static function instance(LogFile $file): static public static function clearInstance(LogFile $file): void { if (isset(static::$_instances[$file->path])) { + if (method_exists(static::$_instances[$file->path], 'closeFile')) { + static::$_instances[$file->path]->closeFile(); + } + unset(static::$_instances[$file->path]); } } public static function clearInstances(): void { + foreach (static::$_instances as $instance) { + if (method_exists($instance, 'closeFile')) { + $instance->closeFile(); + } + } + static::$_instances = []; } } diff --git a/src/LogTypeRegistrar.php b/src/LogTypeRegistrar.php index 754cf243..b572cbd4 100644 --- a/src/LogTypeRegistrar.php +++ b/src/LogTypeRegistrar.php @@ -114,6 +114,6 @@ public function guessTypeFromFileName(LogFile $file): ?string protected function isPossiblyLaravelLogFile(string $fileName): bool { return $fileName === 'laravel.log' - || preg_match('/laravel-\d{4}-\d{2}-\d{2}\.log/', $fileName); + || preg_match('/^laravel-.+\.log$/', $fileName); } } diff --git a/tests/Pest.php b/tests/Pest.php index a89d8a9b..3664fe4d 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -79,6 +79,9 @@ function dummyLogData(?int $lines = null, string $type = LogType::LARAVEL): stri function clearGeneratedLogFiles(): void { + $logReaderClass = \Opcodes\LogViewer\Facades\LogViewer::logReaderClass(); + $logReaderClass::clearInstances(); + File::cleanDirectory(storage_path('logs')); clearstatcache(); } diff --git a/tests/Unit/LogTypeRegistrarTest.php b/tests/Unit/LogTypeRegistrarTest.php new file mode 100644 index 00000000..351ce4f1 --- /dev/null +++ b/tests/Unit/LogTypeRegistrarTest.php @@ -0,0 +1,92 @@ +registrar = new LogTypeRegistrar; +}); + +test('laravel.log is detected as Laravel log', function () { + $logFile = generateLogFile('laravel.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::LARAVEL); +}); + +test('laravel-YYYY-MM-DD.log is detected as Laravel log', function () { + $logFile = generateLogFile('laravel-2024-01-16.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::LARAVEL); +}); + +test('laravel-mychannel.log is detected as Laravel log', function () { + $logFile = generateLogFile('laravel-mychannel.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::LARAVEL); +}); + +test('laravel-anything.log is detected as Laravel log', function () { + $logFile = generateLogFile('laravel-anything.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::LARAVEL); +}); + +test('laravel-errors.log is detected as Laravel log', function () { + $logFile = generateLogFile('laravel-errors.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::LARAVEL); +}); + +test('php-fpm.log is detected as PHP-FPM log', function () { + $logFile = generateLogFile('php-fpm.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::PHP_FPM); +}); + +test('access.log is detected as HTTP access log', function () { + $logFile = generateLogFile('access.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::HTTP_ACCESS); +}); + +test('postgres.log is detected as Postgres log', function () { + $logFile = generateLogFile('postgres.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::POSTGRES); +}); + +test('redis.log is detected as Redis log', function () { + $logFile = generateLogFile('redis.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::REDIS); +}); + +test('supervisor.log is detected as Supervisor log', function () { + $logFile = generateLogFile('supervisor.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBe(LogType::SUPERVISOR); +}); + +test('unknown.log returns null', function () { + $logFile = generateLogFile('unknown.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBeNull(); +}); + +test('custom.log returns null', function () { + $logFile = generateLogFile('custom.log'); + $type = $this->registrar->guessTypeFromFileName($logFile); + + expect($type)->toBeNull(); +});