diff --git a/config/log-viewer.php b/config/log-viewer.php index 5c9c762a..d08f6361 100644 --- a/config/log-viewer.php +++ b/config/log-viewer.php @@ -47,6 +47,17 @@ 'include_files' => ['*.log'], + 'include_recursively' => false, + + /* + |-------------------------------------------------------------------------- + | File list grouping + |-------------------------------------------------------------------------- + | + */ + + 'group_by_subfolder' => false, + /* |-------------------------------------------------------------------------- | Exclude file patterns. diff --git a/resources/views/livewire/file-list.blade.php b/resources/views/livewire/file-list.blade.php index 79571d37..1ab7fb69 100644 --- a/resources/views/livewire/file-list.blade.php +++ b/resources/views/livewire/file-list.blade.php @@ -1,13 +1,17 @@
- @foreach($files as $logFile) -
{{ $subFolder }}
+ @endif + @foreach($logFiles as $logFile) +
-
-

{{ str_replace(DIRECTORY_SEPARATOR, ' '.DIRECTORY_SEPARATOR.' ', $logFile->subFolder) }} {{ $logFile->name }}

- {{ $logFile->sizeFormatted() }} - -
- - -
+ @endforeach @endforeach
diff --git a/routes/web.php b/routes/web.php index e661e468..6a5e2401 100644 --- a/routes/web.php +++ b/routes/web.php @@ -21,7 +21,7 @@ Route::get('file/{fileIdentifier}/download', function (string $fileIdentifier) { LogViewer::auth(); - + $file = LogViewer::getFile($fileIdentifier); abort_if(is_null($file), 404); diff --git a/src/Http/Livewire/FileList.php b/src/Http/Livewire/FileList.php index 99ed9c09..390090fc 100644 --- a/src/Http/Livewire/FileList.php +++ b/src/Http/Livewire/FileList.php @@ -5,6 +5,7 @@ use Illuminate\Support\Facades\Gate; use Livewire\Component; use Opcodes\LogViewer\Facades\LogViewer; +use Opcodes\LogViewer\LogFile; class FileList extends Component { @@ -22,7 +23,15 @@ public function mount(string $selectedFileIdentifier = null) public function render() { return view('log-viewer::livewire.file-list', [ - 'files' => LogViewer::getFiles(), + 'files' => LogViewer::getFiles()->mapToGroups(function (LogFile $file) { + if (config('log-viewer.group_by_subfolder')) { + $group = $file->subFolder ?: '_root'; + } else { + $group = '_root'; + } + + return [$group => $file]; + })->sortKeys(), ]); } diff --git a/src/LogViewerService.php b/src/LogViewerService.php index 5e281e5d..835c8758 100755 --- a/src/LogViewerService.php +++ b/src/LogViewerService.php @@ -6,7 +6,7 @@ use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Support\Collection; use Illuminate\Support\Facades\Gate; -use Illuminate\Support\Str; +use Symfony\Component\Finder\Finder; class LogViewerService { @@ -20,19 +20,18 @@ class LogViewerService protected function getFilePaths(): array { - $files = []; - - foreach (config('log-viewer.include_files', []) as $pattern) { - $files = array_merge($files, glob(Str::finish(storage_path('logs'), DIRECTORY_SEPARATOR).$pattern)); - } - - foreach (config('log-viewer.exclude_files', []) as $pattern) { - $files = array_diff($files, glob(Str::finish(storage_path('logs'), DIRECTORY_SEPARATOR).$pattern)); + $finder = Finder::create()->in(storage_path('logs')) + ->files() + ->name(config('log-viewer.include_files', [])) + ->notName(config('log-viewer.exclude_files', [])) + ->sortByModifiedTime() + ->reverseSorting(); + + if (! config('log-viewer.include_recursively', false)) { + $finder->depth('== 0'); } - $files = array_reverse($files); - - return array_filter($files, 'is_file'); + return array_keys(iterator_to_array($finder)); } /**