Replace current panel log viewer with new and improved log viewer (#1834)

This commit is contained in:
Charles 2025-11-08 19:31:51 -05:00 committed by GitHub
parent a30c45fbbe
commit 2b5403a4da
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 530 additions and 159 deletions

View File

@ -0,0 +1,130 @@
<?php
namespace App\Filament\Admin\Pages;
use Boquizo\FilamentLogViewer\Actions\DeleteAction;
use Boquizo\FilamentLogViewer\Actions\DownloadAction;
use Boquizo\FilamentLogViewer\Actions\ViewLogAction;
use Boquizo\FilamentLogViewer\Pages\ListLogs as BaseListLogs;
use Boquizo\FilamentLogViewer\Tables\Columns\LevelColumn;
use Boquizo\FilamentLogViewer\Tables\Columns\NameColumn;
use Boquizo\FilamentLogViewer\Utils\Level;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Support\Enums\IconSize;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Http;
class ListLogs extends BaseListLogs
{
protected string $view = 'filament.components.list-logs';
public function getHeading(): string|null|\Illuminate\Contracts\Support\Htmlable
{
return trans('admin/log.navigation.panel_logs');
}
public static function table(Table $table): Table
{
return parent::table($table)
->emptyStateHeading(trans('admin/log.empty_table'))
->emptyStateIcon('tabler-check')
->columns([
NameColumn::make('date'),
LevelColumn::make(Level::ALL)
->tooltip(trans('admin/log.total_logs')),
LevelColumn::make(Level::Error)
->tooltip(trans('admin/log.error')),
LevelColumn::make(Level::Warning)
->tooltip(trans('admin/log.warning')),
LevelColumn::make(Level::Notice)
->tooltip(trans('admin/log.notice')),
LevelColumn::make(Level::Info)
->tooltip(trans('admin/log.info')),
LevelColumn::make(Level::Debug)
->tooltip(trans('admin/log.debug')),
])
->recordActions([
ViewLogAction::make()
->icon('tabler-file-description')->iconSize(IconSize::Medium),
DownloadAction::make()
->icon('tabler-file-download')->iconSize(IconSize::Medium),
Action::make('uploadLogs')
->button()
->hiddenLabel()
->icon('tabler-world-upload')->iconSize(IconSize::Medium)
->requiresConfirmation()
->modalHeading(trans('admin/log.actions.upload_logs'))
->modalDescription(fn ($record) => trans('admin/log.actions.upload_logs_description', ['file' => $record['date'], 'url' => 'https://logs.pelican.dev']))
->action(function ($record) {
$logPath = storage_path('logs/' . $record['date']);
if (!file_exists($logPath)) {
Notification::make()
->title(trans('admin/log.actions.log_not_found'))
->body(trans('admin/log.actions.log_not_found_description', ['filename' => $record['date']]))
->danger()
->send();
return;
}
$lines = file($logPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$totalLines = count($lines);
$uploadLines = $totalLines <= 1000 ? $lines : array_slice($lines, -1000);
$content = implode("\n", $uploadLines);
$logUrl = 'https://logs.pelican.dev';
try {
$response = Http::timeout(10)->asMultipart()->post($logUrl, [
[
'name' => 'c',
'contents' => $content,
],
[
'name' => 'e',
'contents' => '14d',
],
]);
if ($response->failed()) {
Notification::make()
->title(trans('admin/log.actions.failed_to_upload'))
->body(trans('admin/log.actions.failed_to_upload_description', ['status' => $response->status()]))
->danger()
->send();
return;
}
$data = $response->json();
$url = $data['url'];
Notification::make()
->title(trans('admin/log.actions.log_upload'))
->body("{$url}")
->success()
->actions([
Action::make('viewLogs')
->label(trans('admin/log.actions.view_logs'))
->url($url)
->openUrlInNewTab(true),
])
->persistent()
->send();
} catch (\Exception $e) {
Notification::make()
->title(trans('admin/log.actions.failed_to_upload'))
->body($e->getMessage())
->danger()
->send();
return;
}
}),
DeleteAction::make()
->icon('tabler-trash')->iconSize(IconSize::Medium),
]);
}
}

View File

@ -0,0 +1,105 @@
<?php
namespace App\Filament\Admin\Pages;
use App\Traits\ResolvesRecordDate;
use Boquizo\FilamentLogViewer\Actions\BackAction;
use Boquizo\FilamentLogViewer\Actions\DeleteAction;
use Boquizo\FilamentLogViewer\Actions\DownloadAction;
use Boquizo\FilamentLogViewer\Pages\ViewLog as BaseViewLog;
use Filament\Actions\Action;
use Filament\Notifications\Notification;
use Filament\Support\Enums\IconSize;
use Illuminate\Support\Facades\Http;
class ViewLogs extends BaseViewLog
{
use ResolvesRecordDate;
public function getHeaderActions(): array
{
return [
DeleteAction::make(withTooltip: true)
->icon('tabler-trash')->iconSize(IconSize::Medium),
DownloadAction::make(withTooltip: true)
->icon('tabler-file-download')->iconSize(IconSize::Medium),
Action::make('uploadLogs')
->button()
->hiddenLabel()
->icon('tabler-world-upload')->iconSize(IconSize::Medium)
->requiresConfirmation()
->tooltip(trans('admin/log.actions.upload_tooltip', ['url' => 'logs.pelican.dev']))
->modalHeading(trans('admin/log.actions.upload_logs'))
->modalDescription(fn () => trans('admin/log.actions.upload_logs_description', ['file' => $this->resolveRecordDate(), 'url' => 'https://logs.pelican.dev']))
->action(function () {
$logPath = storage_path('logs/' . $this->resolveRecordDate());
if (!file_exists($logPath)) {
Notification::make()
->title(trans('admin/log.actions.log_not_found'))
->body(trans('admin/log.actions.log_not_found_description', ['filename' => $this->resolveRecordDate()]))
->danger()
->send();
return;
}
$lines = file($logPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$totalLines = count($lines);
$uploadLines = $totalLines <= 1000 ? $lines : array_slice($lines, -1000);
$content = implode("\n", $uploadLines);
$logUrl = 'https://logs.pelican.dev';
try {
$response = Http::timeout(10)->asMultipart()->post($logUrl, [
[
'name' => 'c',
'contents' => $content,
],
[
'name' => 'e',
'contents' => '14d',
],
]);
if ($response->failed()) {
Notification::make()
->title(trans('admin/log.actions.failed_to_upload'))
->body(trans('admin/log.actions.failed_to_upload_description', ['status' => $response->status()]))
->danger()
->send();
return;
}
$data = $response->json();
$url = $data['url'];
Notification::make()
->title(trans('admin/log.actions.log_upload'))
->body("{$url}")
->success()
->actions([
Action::make('viewLogs')
->label(trans('admin/log.actions.view_logs'))
->url($url)
->openUrlInNewTab(true),
])
->persistent()
->send();
} catch (\Exception $e) {
Notification::make()
->title(trans('admin/log.actions.failed_to_upload'))
->body($e->getMessage())
->danger()
->send();
return;
}
}),
BackAction::make()
->icon('tabler-arrow-left')->iconSize(IconSize::Medium),
];
}
}

View File

@ -2,7 +2,9 @@
namespace App\Providers\Filament; namespace App\Providers\Filament;
use AchyutN\FilamentLogViewer\FilamentLogViewer; use App\Filament\Admin\Pages\ListLogs;
use App\Filament\Admin\Pages\ViewLogs;
use Boquizo\FilamentLogViewer\FilamentLogViewerPlugin;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Facades\Filament; use Filament\Facades\Filament;
use Filament\Navigation\NavigationGroup; use Filament\Navigation\NavigationGroup;
@ -35,8 +37,11 @@ class AdminPanelProvider extends PanelProvider
->discoverPages(in: app_path('Filament/Admin/Pages'), for: 'App\\Filament\\Admin\\Pages') ->discoverPages(in: app_path('Filament/Admin/Pages'), for: 'App\\Filament\\Admin\\Pages')
->discoverWidgets(in: app_path('Filament/Admin/Widgets'), for: 'App\\Filament\\Admin\\Widgets') ->discoverWidgets(in: app_path('Filament/Admin/Widgets'), for: 'App\\Filament\\Admin\\Widgets')
->plugins([ ->plugins([
FilamentLogViewer::make() FilamentLogViewerPlugin::make()
->authorize(fn () => user()->can('view panelLog')) ->authorize(fn () => user()->can('view panelLog'))
->listLogs(ListLogs::class)
->viewLog(ViewLogs::class)
->navigationLabel(fn () => trans('admin/log.navigation.panel_logs'))
->navigationGroup(fn () => trans('admin/dashboard.advanced')) ->navigationGroup(fn () => trans('admin/dashboard.advanced'))
->navigationIcon('tabler-file-info'), ->navigationIcon('tabler-file-info'),
]); ]);

View File

@ -2,7 +2,7 @@
namespace App\Providers\Filament; namespace App\Providers\Filament;
use AchyutN\FilamentLogViewer\FilamentLogViewer; use Boquizo\FilamentLogViewer\FilamentLogViewerPlugin;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Facades\Filament; use Filament\Facades\Filament;
use Filament\Panel; use Filament\Panel;
@ -26,7 +26,7 @@ class AppPanelProvider extends PanelProvider
]) ])
->discoverResources(in: app_path('Filament/App/Resources'), for: 'App\\Filament\\App\\Resources') ->discoverResources(in: app_path('Filament/App/Resources'), for: 'App\\Filament\\App\\Resources')
->plugins([ ->plugins([
FilamentLogViewer::make() FilamentLogViewerPlugin::make()
->authorize(false), ->authorize(false),
]); ]);
} }

View File

@ -0,0 +1,45 @@
<?php
namespace App\Traits;
use Illuminate\Support\Arr;
trait ResolvesRecordDate
{
/**
* @param mixed|null $record
*/
protected function resolveRecordDate($record = null): ?string
{
$r = $record ?? ($this->record ?? null);
if (is_scalar($r)) {
return (string) $r;
}
if (is_array($r)) {
return Arr::get($r, 'date') !== null ? (string) Arr::get($r, 'date') : null;
}
if (is_object($r)) {
if (method_exists($r, 'getAttribute')) {
$val = $r->getAttribute('date');
if ($val !== null) {
return (string) $val;
}
}
if (isset($r->date) || property_exists($r, 'date')) {
return (string) $r->date;
}
if (method_exists($r, 'toArray')) {
$arr = $r->toArray();
return Arr::get($arr, 'date') !== null ? (string) Arr::get($arr, 'date') : null;
}
}
return null;
}
}

View File

@ -9,11 +9,11 @@
"ext-mbstring": "*", "ext-mbstring": "*",
"ext-pdo": "*", "ext-pdo": "*",
"ext-zip": "*", "ext-zip": "*",
"achyutn/filament-log-viewer": "^1.4",
"aws/aws-sdk-php": "^3.356", "aws/aws-sdk-php": "^3.356",
"calebporzio/sushi": "^2.5", "calebporzio/sushi": "^2.5",
"dedoc/scramble": "^0.12.10", "dedoc/scramble": "^0.12.10",
"filament/filament": "~4.0", "filament/filament": "~4.0",
"gboquizosanchez/filament-log-viewer": "^2.1",
"guzzlehttp/guzzle": "^7.10", "guzzlehttp/guzzle": "^7.10",
"laravel/framework": "^12.37", "laravel/framework": "^12.37",
"laravel/helpers": "^1.7", "laravel/helpers": "^1.7",

363
composer.lock generated
View File

@ -4,89 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "c8143eccd2736bd88b35d8fe6c8de289", "content-hash": "fc2037e2f16ad43582ceaf9d41aba799",
"packages": [ "packages": [
{
"name": "achyutn/filament-log-viewer",
"version": "v1.5.2",
"source": {
"type": "git",
"url": "https://github.com/achyutkneupane/filament-log-viewer.git",
"reference": "e285e5cb359d92d17c64e981de13d0e7741f4121"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/achyutkneupane/filament-log-viewer/zipball/e285e5cb359d92d17c64e981de13d0e7741f4121",
"reference": "e285e5cb359d92d17c64e981de13d0e7741f4121",
"shasum": ""
},
"require": {
"filament/filament": "^4.0",
"phiki/phiki": "^2.0",
"php": ">=8.2"
},
"require-dev": {
"larastan/larastan": "^3.0",
"laravel/pint": "^1.23",
"orchestra/testbench": "^10.4",
"pestphp/pest": "^3.8",
"pestphp/pest-plugin-laravel": "^3.2",
"pestphp/pest-plugin-livewire": "^3.0",
"phpstan/phpstan": "^2.1",
"rector/rector": "^2.1"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"AchyutN\\FilamentLogViewer\\LogViewerProvider"
]
}
},
"autoload": {
"psr-4": {
"AchyutN\\FilamentLogViewer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Achyut Neupane",
"email": "achyutkneupane@gmail.com",
"homepage": "https://achyut.com.np",
"role": "Maintainer"
}
],
"description": "A Filament package to view and manage Laravel logs.",
"keywords": [
"Viewer",
"filament",
"laravel",
"log"
],
"support": {
"issues": "https://github.com/achyutkneupane/filament-log-viewer/issues",
"source": "https://github.com/achyutkneupane/filament-log-viewer/tree/v1.5.2"
},
"funding": [
{
"url": "https://www.buymeacoffee.com/achyutn",
"type": "buy_me_a_coffee"
},
{
"url": "https://github.com/achyutkneupane",
"type": "github"
},
{
"url": "https://www.patreon.com/Achyut",
"type": "patreon"
}
],
"time": "2025-10-10T18:58:40+00:00"
},
{ {
"name": "anourvalar/eloquent-serialize", "name": "anourvalar/eloquent-serialize",
"version": "1.3.4", "version": "1.3.4",
@ -209,16 +128,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.359.4", "version": "3.359.8",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "510cb4b7e2fa3ea09ad2154e7a13fe7675c36b30" "reference": "a5be7ed5efd25d70a74275daeff896b896d9c286"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/510cb4b7e2fa3ea09ad2154e7a13fe7675c36b30", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/a5be7ed5efd25d70a74275daeff896b896d9c286",
"reference": "510cb4b7e2fa3ea09ad2154e7a13fe7675c36b30", "reference": "a5be7ed5efd25d70a74275daeff896b896d9c286",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -300,9 +219,9 @@
"support": { "support": {
"forum": "https://github.com/aws/aws-sdk-php/discussions", "forum": "https://github.com/aws/aws-sdk-php/discussions",
"issues": "https://github.com/aws/aws-sdk-php/issues", "issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.359.4" "source": "https://github.com/aws/aws-sdk-php/tree/3.359.8"
}, },
"time": "2025-11-03T19:18:23+00:00" "time": "2025-11-07T19:48:19+00:00"
}, },
{ {
"name": "blade-ui-kit/blade-heroicons", "name": "blade-ui-kit/blade-heroicons",
@ -2023,6 +1942,70 @@
], ],
"time": "2023-10-12T05:21:21+00:00" "time": "2023-10-12T05:21:21+00:00"
}, },
{
"name": "gboquizosanchez/filament-log-viewer",
"version": "2.1.8",
"source": {
"type": "git",
"url": "https://github.com/gboquizosanchez/filament-log-viewer.git",
"reference": "85480879ed0f4da15257393f6c2e0c0ea0892403"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/gboquizosanchez/filament-log-viewer/zipball/85480879ed0f4da15257393f6c2e0c0ea0892403",
"reference": "85480879ed0f4da15257393f6c2e0c0ea0892403",
"shasum": ""
},
"require": {
"ext-zip": "*",
"owenvoke/blade-fontawesome": "^2.9",
"php": "^8.2|^8.3|^8.4",
"symfony/polyfill-php83": "^1.33"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.64",
"hermes/dependencies": "^1.1",
"larastan/larastan": "^2.9",
"orchestra/testbench": "^9.1",
"pestphp/pest": "^3.5"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Boquizo\\FilamentLogViewer\\FilamentLogViewerServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Boquizo\\FilamentLogViewer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Germán Boquizo Sánchez",
"email": "germanboquizosanchez@gmail.com",
"role": "Developer"
}
],
"description": "Filament Log Viewer",
"homepage": "https://github.com/gboquizosanchez",
"keywords": [
"filament",
"laravel",
"log-viewer"
],
"support": {
"issues": "https://github.com/gboquizosanchez/filament-log-viewer/issues",
"source": "https://github.com/gboquizosanchez/filament-log-viewer/tree/2.1.8"
},
"time": "2025-11-07T21:40:26+00:00"
},
{ {
"name": "graham-campbell/result-type", "name": "graham-campbell/result-type",
"version": "v1.1.3", "version": "v1.1.3",
@ -5207,6 +5190,66 @@
], ],
"time": "2025-01-30T13:51:11+00:00" "time": "2025-01-30T13:51:11+00:00"
}, },
{
"name": "owenvoke/blade-fontawesome",
"version": "v2.9.1",
"source": {
"type": "git",
"url": "https://github.com/owenvoke/blade-fontawesome.git",
"reference": "94dcd0c78f43f8234b0d9c76c903ecd288b8b0d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/owenvoke/blade-fontawesome/zipball/94dcd0c78f43f8234b0d9c76c903ecd288b8b0d1",
"reference": "94dcd0c78f43f8234b0d9c76c903ecd288b8b0d1",
"shasum": ""
},
"require": {
"blade-ui-kit/blade-icons": "^1.5",
"illuminate/support": "^10.34|^11.0|^12.0",
"php": "^8.1"
},
"require-dev": {
"laravel/pint": "^1.13",
"orchestra/testbench": "^8.12|^9.0|^10.0",
"pestphp/pest": "^2.26|^3.7",
"phpstan/phpstan": "^1.10|^2.1",
"symfony/var-dumper": "^6.3|^7.2"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"OwenVoke\\BladeFontAwesome\\BladeFontAwesomeServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"OwenVoke\\BladeFontAwesome\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"description": "A package to easily make use of Font Awesome in your Laravel Blade views",
"support": {
"issues": "https://github.com/owenvoke/blade-fontawesome/issues",
"source": "https://github.com/owenvoke/blade-fontawesome/tree/v2.9.1"
},
"funding": [
{
"url": "https://ecologi.com/owenvoke?gift-trees",
"type": "custom"
},
{
"url": "https://github.com/owenvoke",
"type": "github"
}
],
"time": "2025-03-28T16:03:42+00:00"
},
{ {
"name": "paragonie/constant_time_encoding", "name": "paragonie/constant_time_encoding",
"version": "v3.1.3", "version": "v3.1.3",
@ -5328,16 +5371,16 @@
}, },
{ {
"name": "phiki/phiki", "name": "phiki/phiki",
"version": "v2.0.4", "version": "v2.0.5",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/phikiphp/phiki.git", "url": "https://github.com/phikiphp/phiki.git",
"reference": "160785c50c01077780ab217e5808f00ab8f05a13" "reference": "36d03e4c103b825f2657db966730d43e2035ff00"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/phikiphp/phiki/zipball/160785c50c01077780ab217e5808f00ab8f05a13", "url": "https://api.github.com/repos/phikiphp/phiki/zipball/36d03e4c103b825f2657db966730d43e2035ff00",
"reference": "160785c50c01077780ab217e5808f00ab8f05a13", "reference": "36d03e4c103b825f2657db966730d43e2035ff00",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -5383,7 +5426,7 @@
"description": "Syntax highlighting using TextMate grammars in PHP.", "description": "Syntax highlighting using TextMate grammars in PHP.",
"support": { "support": {
"issues": "https://github.com/phikiphp/phiki/issues", "issues": "https://github.com/phikiphp/phiki/issues",
"source": "https://github.com/phikiphp/phiki/tree/v2.0.4" "source": "https://github.com/phikiphp/phiki/tree/v2.0.5"
}, },
"funding": [ "funding": [
{ {
@ -5395,7 +5438,7 @@
"type": "other" "type": "other"
} }
], ],
"time": "2025-09-20T17:21:02+00:00" "time": "2025-11-04T20:03:45+00:00"
}, },
{ {
"name": "phpdocumentor/reflection", "name": "phpdocumentor/reflection",
@ -8258,16 +8301,16 @@
}, },
{ {
"name": "symfony/console", "name": "symfony/console",
"version": "v7.3.5", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/console.git", "url": "https://github.com/symfony/console.git",
"reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7" "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/cdb80fa5869653c83cfe1a9084a673b6daf57ea7", "url": "https://api.github.com/repos/symfony/console/zipball/c28ad91448f86c5f6d9d2c70f0cf68bf135f252a",
"reference": "cdb80fa5869653c83cfe1a9084a673b6daf57ea7", "reference": "c28ad91448f86c5f6d9d2c70f0cf68bf135f252a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8332,7 +8375,7 @@
"terminal" "terminal"
], ],
"support": { "support": {
"source": "https://github.com/symfony/console/tree/v7.3.5" "source": "https://github.com/symfony/console/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -8352,20 +8395,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-10-14T15:46:26+00:00" "time": "2025-11-04T01:21:42+00:00"
}, },
{ {
"name": "symfony/css-selector", "name": "symfony/css-selector",
"version": "v7.3.0", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/css-selector.git", "url": "https://github.com/symfony/css-selector.git",
"reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" "reference": "84321188c4754e64273b46b406081ad9b18e8614"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", "url": "https://api.github.com/repos/symfony/css-selector/zipball/84321188c4754e64273b46b406081ad9b18e8614",
"reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "reference": "84321188c4754e64273b46b406081ad9b18e8614",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8401,7 +8444,7 @@
"description": "Converts CSS selectors to XPath expressions", "description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/css-selector/tree/v7.3.0" "source": "https://github.com/symfony/css-selector/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -8412,12 +8455,16 @@
"url": "https://github.com/fabpot", "url": "https://github.com/fabpot",
"type": "github" "type": "github"
}, },
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{ {
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-25T14:21:43+00:00" "time": "2025-10-29T17:24:25+00:00"
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
@ -8488,16 +8535,16 @@
}, },
{ {
"name": "symfony/error-handler", "name": "symfony/error-handler",
"version": "v7.3.4", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/error-handler.git", "url": "https://github.com/symfony/error-handler.git",
"reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4" "reference": "bbe40bfab84323d99dab491b716ff142410a92a8"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", "url": "https://api.github.com/repos/symfony/error-handler/zipball/bbe40bfab84323d99dab491b716ff142410a92a8",
"reference": "99f81bc944ab8e5dae4f21b4ca9972698bbad0e4", "reference": "bbe40bfab84323d99dab491b716ff142410a92a8",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8545,7 +8592,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code", "description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/error-handler/tree/v7.3.4" "source": "https://github.com/symfony/error-handler/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -8565,7 +8612,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-09-11T10:12:26+00:00" "time": "2025-10-31T19:12:50+00:00"
}, },
{ {
"name": "symfony/event-dispatcher", "name": "symfony/event-dispatcher",
@ -8797,16 +8844,16 @@
}, },
{ {
"name": "symfony/html-sanitizer", "name": "symfony/html-sanitizer",
"version": "v7.3.3", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/html-sanitizer.git", "url": "https://github.com/symfony/html-sanitizer.git",
"reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12" "reference": "3855e827adb1b675adcb98ad7f92681e293f2d77"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/8740fc48979f649dee8b8fc51a2698e5c190bf12", "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/3855e827adb1b675adcb98ad7f92681e293f2d77",
"reference": "8740fc48979f649dee8b8fc51a2698e5c190bf12", "reference": "3855e827adb1b675adcb98ad7f92681e293f2d77",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8846,7 +8893,7 @@
"sanitizer" "sanitizer"
], ],
"support": { "support": {
"source": "https://github.com/symfony/html-sanitizer/tree/v7.3.3" "source": "https://github.com/symfony/html-sanitizer/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -8866,20 +8913,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-08-12T10:34:03+00:00" "time": "2025-10-30T13:22:58+00:00"
}, },
{ {
"name": "symfony/http-client", "name": "symfony/http-client",
"version": "v7.3.4", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-client.git", "url": "https://github.com/symfony/http-client.git",
"reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62" "reference": "3c0a55a2c8e21e30a37022801c11c7ab5a6cb2de"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/4b62871a01c49457cf2a8e560af7ee8a94b87a62", "url": "https://api.github.com/repos/symfony/http-client/zipball/3c0a55a2c8e21e30a37022801c11c7ab5a6cb2de",
"reference": "4b62871a01c49457cf2a8e560af7ee8a94b87a62", "reference": "3c0a55a2c8e21e30a37022801c11c7ab5a6cb2de",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -8946,7 +8993,7 @@
"http" "http"
], ],
"support": { "support": {
"source": "https://github.com/symfony/http-client/tree/v7.3.4" "source": "https://github.com/symfony/http-client/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -8966,7 +9013,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-09-11T10:12:26+00:00" "time": "2025-11-05T17:41:46+00:00"
}, },
{ {
"name": "symfony/http-client-contracts", "name": "symfony/http-client-contracts",
@ -9048,16 +9095,16 @@
}, },
{ {
"name": "symfony/http-foundation", "name": "symfony/http-foundation",
"version": "v7.3.5", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-foundation.git", "url": "https://github.com/symfony/http-foundation.git",
"reference": "ce31218c7cac92eab280762c4375fb70a6f4f897" "reference": "6379e490d6ecfc5c4224ff3a754b90495ecd135c"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce31218c7cac92eab280762c4375fb70a6f4f897", "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6379e490d6ecfc5c4224ff3a754b90495ecd135c",
"reference": "ce31218c7cac92eab280762c4375fb70a6f4f897", "reference": "6379e490d6ecfc5c4224ff3a754b90495ecd135c",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -9107,7 +9154,7 @@
"description": "Defines an object-oriented layer for the HTTP specification", "description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/http-foundation/tree/v7.3.5" "source": "https://github.com/symfony/http-foundation/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -9127,20 +9174,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-10-24T21:42:11+00:00" "time": "2025-11-06T11:05:57+00:00"
}, },
{ {
"name": "symfony/http-kernel", "name": "symfony/http-kernel",
"version": "v7.3.5", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/http-kernel.git", "url": "https://github.com/symfony/http-kernel.git",
"reference": "24fd3f123532e26025f49f1abefcc01a69ef15ab" "reference": "f9a34dc0196677250e3609c2fac9de9e1551a262"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/24fd3f123532e26025f49f1abefcc01a69ef15ab", "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f9a34dc0196677250e3609c2fac9de9e1551a262",
"reference": "24fd3f123532e26025f49f1abefcc01a69ef15ab", "reference": "f9a34dc0196677250e3609c2fac9de9e1551a262",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -9225,7 +9272,7 @@
"description": "Provides a structured process for converting a Request into a Response", "description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/http-kernel/tree/v7.3.5" "source": "https://github.com/symfony/http-kernel/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -9245,7 +9292,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-10-28T10:19:01+00:00" "time": "2025-11-06T20:58:12+00:00"
}, },
{ {
"name": "symfony/mailer", "name": "symfony/mailer",
@ -10454,16 +10501,16 @@
}, },
{ {
"name": "symfony/routing", "name": "symfony/routing",
"version": "v7.3.4", "version": "v7.3.6",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/routing.git", "url": "https://github.com/symfony/routing.git",
"reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c" "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/8dc648e159e9bac02b703b9fbd937f19ba13d07c", "url": "https://api.github.com/repos/symfony/routing/zipball/c97abe725f2a1a858deca629a6488c8fc20c3091",
"reference": "8dc648e159e9bac02b703b9fbd937f19ba13d07c", "reference": "c97abe725f2a1a858deca629a6488c8fc20c3091",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -10515,7 +10562,7 @@
"url" "url"
], ],
"support": { "support": {
"source": "https://github.com/symfony/routing/tree/v7.3.4" "source": "https://github.com/symfony/routing/tree/v7.3.6"
}, },
"funding": [ "funding": [
{ {
@ -10535,20 +10582,20 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-09-11T10:12:26+00:00" "time": "2025-11-05T07:57:47+00:00"
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v3.6.0", "version": "v3.6.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43",
"reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -10602,7 +10649,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.6.0" "source": "https://github.com/symfony/service-contracts/tree/v3.6.1"
}, },
"funding": [ "funding": [
{ {
@ -10613,12 +10660,16 @@
"url": "https://github.com/fabpot", "url": "https://github.com/fabpot",
"type": "github" "type": "github"
}, },
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{ {
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2025-04-25T09:37:31+00:00" "time": "2025-07-15T11:30:57+00:00"
}, },
{ {
"name": "symfony/string", "name": "symfony/string",
@ -10812,16 +10863,16 @@
}, },
{ {
"name": "symfony/translation-contracts", "name": "symfony/translation-contracts",
"version": "v3.6.0", "version": "v3.6.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/translation-contracts.git", "url": "https://github.com/symfony/translation-contracts.git",
"reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" "reference": "65a8bc82080447fae78373aa10f8d13b38338977"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977",
"reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "reference": "65a8bc82080447fae78373aa10f8d13b38338977",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -10870,7 +10921,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1"
}, },
"funding": [ "funding": [
{ {
@ -10881,12 +10932,16 @@
"url": "https://github.com/fabpot", "url": "https://github.com/fabpot",
"type": "github" "type": "github"
}, },
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{ {
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2024-09-27T08:32:26+00:00" "time": "2025-07-15T13:41:35+00:00"
}, },
{ {
"name": "symfony/uid", "name": "symfony/uid",

26
lang/en/admin/log.php Normal file
View File

@ -0,0 +1,26 @@
<?php
return [
'empty_table' => 'Yay! No Errors!',
'total_logs' => 'Total Logs',
'error' => 'Error',
'warning' => 'Warning',
'notice' => 'Notice',
'info' => 'Info',
'debug' => 'Debug',
'navigation' => [
'panel_logs' => 'Panel Logs',
],
'actions' => [
'upload_logs' => 'Upload Logs?',
'upload_logs_description' => 'This will upload :file to :url Are you sure you wish to do this?',
'view_logs' => 'View Logs',
'log_not_found' => 'Log not found!',
'log_not_found_description' => 'Could not find log for :filename',
'failed_to_upload' => 'Filed to upload.',
'failed_to_upload_description' => 'HTTP Status: :status',
'log_upload' => 'Log Uploaded!',
'log_upload_action' => 'View Log',
'upload_tooltip' => 'Upload to :url',
],
];

View File

@ -24,4 +24,6 @@
/* Required by widgets */ /* Required by widgets */
@import '../../vendor/filament/widgets/resources/css/index.css'; @import '../../vendor/filament/widgets/resources/css/index.css';
@source '../../vendor/gboquizosanchez/filament-log-viewer/resources/views/**/*.blade.php';
@variant dark (&:where(.dark, .dark *)); @variant dark (&:where(.dark, .dark *));

View File

@ -0,0 +1,3 @@
<x-filament-panels::page>
{{ $this->table }}
</x-filament-panels::page>