@@ -29,41 +29,56 @@ protected function getFilePaths(): array
29
29
$ baseDir = str_replace (
30
30
['[ ' , '] ' ],
31
31
['{LEFTBRACKET} ' , '{RIGHTBRACKET} ' ],
32
- str_replace ('\\' , '/ ' , $ this ->basePathForLogs ())
32
+ str_replace ('\\' , '/ ' , $ this ->basePathForLogs ()),
33
33
);
34
34
$ baseDir = str_replace (
35
- ['{LEFTBRACKET} ' , '{RIGHTBRACKET} ' ],
36
- ['[[] ' , '[]] ' ],
35
+ ['{LEFTBRACKET} ' , '{RIGHTBRACKET} ' , '\\' ],
36
+ ['[[] ' , '[]] ' , '\\\\' ],
37
37
$ baseDir
38
38
);
39
39
40
40
foreach (config ('log-viewer.include_files ' , []) as $ pattern ) {
41
+ $ absolute = true ;
41
42
if (! str_starts_with ($ pattern , DIRECTORY_SEPARATOR )) {
42
43
$ pattern = $ baseDir .$ pattern ;
44
+ $ absolute = false ;
43
45
}
44
46
45
- $ files = array_merge ($ files , $ this ->getFilePathsMatchingPattern ($ pattern ));
47
+ $ files = array_merge ($ files , $ this ->getFilePathsMatchingPattern ($ pattern, $ absolute ));
46
48
}
47
49
48
50
foreach (config ('log-viewer.exclude_files ' , []) as $ pattern ) {
51
+ $ absolute = true ;
49
52
if (! str_starts_with ($ pattern , DIRECTORY_SEPARATOR )) {
50
53
$ pattern = $ baseDir .$ pattern ;
54
+ $ absolute = false ;
51
55
}
52
56
53
- $ files = array_diff ($ files , $ this ->getFilePathsMatchingPattern ($ pattern ));
57
+ $ files = array_diff ($ files , $ this ->getFilePathsMatchingPattern ($ pattern, $ absolute ));
54
58
}
55
59
56
60
return array_values (array_reverse ($ files ));
57
61
}
58
62
59
- protected function getFilePathsMatchingPattern ($ pattern)
63
+ protected function getFilePathsMatchingPattern ($ pattern, $ absolute = false ): array
60
64
{
61
65
$ files = [];
62
66
63
- foreach ($ this ->getFilesystem ()->allFiles ($ this ->basePathForLogs ()) as $ file )
64
- {
67
+ if (! $ absolute ) {
68
+ $ scannedFiles = $ this ->getFilesystem ()->files ($ this ->basePathForLogs ());
69
+ } else {
70
+ $ pathInfo = pathinfo ($ pattern );
71
+ $ dirname = $ pathInfo ['dirname ' ];
72
+ $ pattern = $ pathInfo ['basename ' ];
73
+
74
+ $ scannedFiles = $ this ->getFilesystem ($ dirname )->files ();
75
+ }
76
+
77
+ foreach ($ scannedFiles as $ file ) {
65
78
if (preg_match (pattern: Glob::toRegex (glob: $ pattern ), subject: $ file )) {
66
- $ files [] = $ file ;
79
+ $ files [] = isset ($ dirname )
80
+ ? $ dirname .DIRECTORY_SEPARATOR .$ file
81
+ : $ file ;
67
82
}
68
83
}
69
84
@@ -73,8 +88,9 @@ protected function getFilePathsMatchingPattern($pattern)
73
88
public function basePathForLogs (): string
74
89
{
75
90
$ rootFolder = Str::of (config ('log-viewer.filesystem.root ' ));
76
- return empty ($ rootFolder )
77
- ? $ rootFolder ->finish ('/ ' )
91
+
92
+ return ($ rootFolder != '' )
93
+ ? $ rootFolder ->finish (DIRECTORY_SEPARATOR )
78
94
: $ rootFolder ;
79
95
}
80
96
@@ -153,8 +169,17 @@ public function getRouteMiddleware(): array
153
169
return config ('log-viewer.middleware ' , []) ?: ['web ' ];
154
170
}
155
171
156
- public function getFilesystem (): Filesystem
172
+ public function getFilesystem ($ absolutePath = '' ): Filesystem
157
173
{
174
+ if (! config ('disable_absolute_filepaths ' ) && ($ absolutePath !== '' ) && is_dir ($ absolutePath )) {
175
+ config ()->set ('filesystems.disks.log-viewer-absolute ' , [
176
+ 'driver ' => 'local ' ,
177
+ 'root ' => $ absolutePath ,
178
+ ]);
179
+
180
+ return Storage::disk ('log-viewer-absolute ' );
181
+ }
182
+
158
183
return Storage::disk (config ('log-viewer.filesystem.disk ' ));
159
184
}
160
185
0 commit comments