Skip to content

Commit a1bd968

Browse files
authored
Merge pull request #500 from opcodesio/feature/flexible-laravel-log-detection
Expand Laravel log file detection to support flexible filenames
2 parents 1e75b1b + f2bb537 commit a1bd968

4 files changed

Lines changed: 106 additions & 1 deletion

File tree

src/Concerns/LogReader/KeepsInstances.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,22 @@ public static function instance(LogFile $file): static
2323
public static function clearInstance(LogFile $file): void
2424
{
2525
if (isset(static::$_instances[$file->path])) {
26+
if (method_exists(static::$_instances[$file->path], 'closeFile')) {
27+
static::$_instances[$file->path]->closeFile();
28+
}
29+
2630
unset(static::$_instances[$file->path]);
2731
}
2832
}
2933

3034
public static function clearInstances(): void
3135
{
36+
foreach (static::$_instances as $instance) {
37+
if (method_exists($instance, 'closeFile')) {
38+
$instance->closeFile();
39+
}
40+
}
41+
3242
static::$_instances = [];
3343
}
3444
}

src/LogTypeRegistrar.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,6 @@ public function guessTypeFromFileName(LogFile $file): ?string
114114
protected function isPossiblyLaravelLogFile(string $fileName): bool
115115
{
116116
return $fileName === 'laravel.log'
117-
|| preg_match('/laravel-\d{4}-\d{2}-\d{2}\.log/', $fileName);
117+
|| preg_match('/^laravel-.+\.log$/', $fileName);
118118
}
119119
}

tests/Pest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ function dummyLogData(?int $lines = null, string $type = LogType::LARAVEL): stri
7979

8080
function clearGeneratedLogFiles(): void
8181
{
82+
$logReaderClass = \Opcodes\LogViewer\Facades\LogViewer::logReaderClass();
83+
$logReaderClass::clearInstances();
84+
8285
File::cleanDirectory(storage_path('logs'));
8386
clearstatcache();
8487
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
<?php
2+
3+
use Opcodes\LogViewer\Logs\LogType;
4+
use Opcodes\LogViewer\LogTypeRegistrar;
5+
6+
beforeEach(function () {
7+
$this->registrar = new LogTypeRegistrar;
8+
});
9+
10+
test('laravel.log is detected as Laravel log', function () {
11+
$logFile = generateLogFile('laravel.log');
12+
$type = $this->registrar->guessTypeFromFileName($logFile);
13+
14+
expect($type)->toBe(LogType::LARAVEL);
15+
});
16+
17+
test('laravel-YYYY-MM-DD.log is detected as Laravel log', function () {
18+
$logFile = generateLogFile('laravel-2024-01-16.log');
19+
$type = $this->registrar->guessTypeFromFileName($logFile);
20+
21+
expect($type)->toBe(LogType::LARAVEL);
22+
});
23+
24+
test('laravel-mychannel.log is detected as Laravel log', function () {
25+
$logFile = generateLogFile('laravel-mychannel.log');
26+
$type = $this->registrar->guessTypeFromFileName($logFile);
27+
28+
expect($type)->toBe(LogType::LARAVEL);
29+
});
30+
31+
test('laravel-anything.log is detected as Laravel log', function () {
32+
$logFile = generateLogFile('laravel-anything.log');
33+
$type = $this->registrar->guessTypeFromFileName($logFile);
34+
35+
expect($type)->toBe(LogType::LARAVEL);
36+
});
37+
38+
test('laravel-errors.log is detected as Laravel log', function () {
39+
$logFile = generateLogFile('laravel-errors.log');
40+
$type = $this->registrar->guessTypeFromFileName($logFile);
41+
42+
expect($type)->toBe(LogType::LARAVEL);
43+
});
44+
45+
test('php-fpm.log is detected as PHP-FPM log', function () {
46+
$logFile = generateLogFile('php-fpm.log');
47+
$type = $this->registrar->guessTypeFromFileName($logFile);
48+
49+
expect($type)->toBe(LogType::PHP_FPM);
50+
});
51+
52+
test('access.log is detected as HTTP access log', function () {
53+
$logFile = generateLogFile('access.log');
54+
$type = $this->registrar->guessTypeFromFileName($logFile);
55+
56+
expect($type)->toBe(LogType::HTTP_ACCESS);
57+
});
58+
59+
test('postgres.log is detected as Postgres log', function () {
60+
$logFile = generateLogFile('postgres.log');
61+
$type = $this->registrar->guessTypeFromFileName($logFile);
62+
63+
expect($type)->toBe(LogType::POSTGRES);
64+
});
65+
66+
test('redis.log is detected as Redis log', function () {
67+
$logFile = generateLogFile('redis.log');
68+
$type = $this->registrar->guessTypeFromFileName($logFile);
69+
70+
expect($type)->toBe(LogType::REDIS);
71+
});
72+
73+
test('supervisor.log is detected as Supervisor log', function () {
74+
$logFile = generateLogFile('supervisor.log');
75+
$type = $this->registrar->guessTypeFromFileName($logFile);
76+
77+
expect($type)->toBe(LogType::SUPERVISOR);
78+
});
79+
80+
test('unknown.log returns null', function () {
81+
$logFile = generateLogFile('unknown.log');
82+
$type = $this->registrar->guessTypeFromFileName($logFile);
83+
84+
expect($type)->toBeNull();
85+
});
86+
87+
test('custom.log returns null', function () {
88+
$logFile = generateLogFile('custom.log');
89+
$type = $this->registrar->guessTypeFromFileName($logFile);
90+
91+
expect($type)->toBeNull();
92+
});

0 commit comments

Comments
 (0)