https://github.com/bezhanSalleh/filament-exceptions
A Simple & Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel
https://github.com/bezhanSalleh/filament-exceptions
exception-reporter exception-viewer filamentadmin filamentphp laravel plugin
Last synced: 22 days ago
JSON representation
A Simple & Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel
- Host: GitHub
- URL: https://github.com/bezhanSalleh/filament-exceptions
- Owner: bezhanSalleh
- License: mit
- Created: 2022-09-04T05:40:51.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2026-03-29T04:20:00.000Z (3 months ago)
- Last Synced: 2026-03-29T07:05:26.249Z (3 months ago)
- Topics: exception-reporter, exception-viewer, filamentadmin, filamentphp, laravel, plugin
- Language: Blade
- Homepage:
- Size: 678 KB
- Stars: 193
- Watchers: 5
- Forks: 30
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
Awesome Lists containing this project
- awesome-filament - Exception Viewer - Exception Viewer plugin for your Filament Panels (Plugins / Administration & Management)
README
# Exception Viewer
A Simple & Beautiful Exception Viewer for FilamentPHP's Admin Panel
> **Version Compatibility:**
> - Filament 4.x & 5.x → use version 4.x
> - Filament 3.x → use version 3.x
> - Filament 2.x → use version 1.x
## Installation
1. You can install the package via composer:
```bash
composer require bezhansalleh/filament-exceptions
```
2. Publish and run the migration via:
```bash
php artisan exceptions:install
```
3. Register the plugin for the Filament Panel
```php
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
\BezhanSalleh\FilamentExceptions\FilamentExceptionsPlugin::make()
]);
}
```
That's it! The package automatically registers itself with Laravel's exception handler and starts recording exceptions.
> [!IMPORTANT]
> The plugin follows Filament's theming rules. So, to use the plugin create a custom theme if you haven't already, and add the following line to your `theme.css` file:
```php
@source '../../../../vendor/bezhansalleh/filament-exceptions/resources/views/**/*.blade.php';
```
Now build your theme using:
```bash
npm run build
```
### Recording Control
By default, exceptions are recorded automatically. You can control this behavior in your `AppServiceProvider`'s `boot()` method:
#### Stop/Start Recording
```php
use BezhanSalleh\FilamentExceptions\FilamentExceptions;
public function boot(): void
{
// Stop recording exceptions
FilamentExceptions::stopRecording();
// Resume recording
FilamentExceptions::startRecording();
// Check if recording is active
FilamentExceptions::isRecording();
}
```
#### Conditional Recording
Use `recordUsing()` to define custom logic for when exceptions should be recorded:
```php
use BezhanSalleh\FilamentExceptions\FilamentExceptions;
public function boot(): void
{
// Only record in production
FilamentExceptions::recordUsing(fn () => app()->isProduction());
// Skip specific exception types
FilamentExceptions::recordUsing(function (Throwable $e) {
return ! $e instanceof \Illuminate\Validation\ValidationException
&& ! $e instanceof \Illuminate\Auth\AuthenticationException;
});
// Combine multiple conditions
FilamentExceptions::recordUsing(function (Throwable $e) {
if (! app()->isProduction()) {
return false;
}
// Skip 4xx HTTP exceptions
if ($e instanceof \Symfony\Component\HttpKernel\Exception\HttpException
&& $e->getStatusCode() < 500) {
return false;
}
return true;
});
}
```
### Configuration Options
When registering the FilamentExceptions plugin, you can chain various methods to customize its behavior. Here are all available configuration options:
#### Navigation
```php
FilamentExceptionsPlugin::make()
->navigationBadge(bool | Closure $condition = true)
->navigationBadgeColor(string | array | Closure $color)
->navigationGroup(string | Closure | null $group)
->navigationParentItem(string | Closure | null $item)
->navigationIcon(string | Closure | null $icon)
->activeNavigationIcon(string | Closure | null $icon)
->navigationLabel(string | Closure | null $label)
->navigationSort(int | Closure | null $sort)
->registerNavigation(bool | Closure $shouldRegisterNavigation)
->subNavigationPosition(SubNavigationPosition | Closure $position)
```
#### Labels and Search
```php
FilamentExceptionsPlugin::make()
->modelLabel(string | Closure | null $label)
->pluralModelLabel(string | Closure | null $label)
->titleCaseModelLabel(bool | Closure $condition = true)
->globallySearchable(bool | Closure $condition = true)
```
#### Mass Pruning Settings
```php
FilamentExceptionsPlugin::make()
->modelPruneInterval(Carbon $interval)
```
> **Note** This requires laravel scheduler to be setup and configured in order to work. You can see how to do that here [Running The Scheduler](https://laravel.com/docs/10.x/scheduling#running-the-scheduler)
#### Tenancy Configuration
```php
FilamentExceptionsPlugin::make()
->scopeToTenant(bool | Closure $condition = true)
->tenantOwnershipRelationshipName(string | Closure | null $ownershipRelationshipName)
->tenantRelationshipName(string | Closure | null $relationshipName)
```
#### General Configuration
```php
FilamentExceptionsPlugin::make()
->cluster(string | Closure | null $cluster)
->slug(string | Closure | null $slug)
```
Example usage:
```php
return $panel
->plugins([
FilamentExceptionsPlugin::make()
->navigationLabel('Error Logs')
->navigationIcon('heroicon-o-bug-ant')
->navigationBadge()
->navigationGroup('System')
->modelPruneInterval(now()->subDays(7))
]);
```
### Custom Exception Model
1. Extend the base model as follow:
```php