PHPackages                             hewerthomn/laravel-error-tracker - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Logging &amp; Monitoring](/categories/logging)
4. /
5. hewerthomn/laravel-error-tracker

ActiveLibrary[Logging &amp; Monitoring](/categories/logging)

hewerthomn/laravel-error-tracker
================================

Laravel-first error tracking package with local dashboard

v1.1.0(2w ago)311↓100%[1 PRs](https://github.com/hewerthomn/laravel-error-tracker/pulls)MITPHPPHP ^8.3CI passing

Since May 5Pushed 1w agoCompare

[ Source](https://github.com/hewerthomn/laravel-error-tracker)[ Packagist](https://packagist.org/packages/hewerthomn/laravel-error-tracker)[ RSS](/packages/hewerthomn-laravel-error-tracker/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (3)Dependencies (7)Versions (5)Used By (0)

Laravel Error Tracker
=====================

[](#laravel-error-tracker)

[![Latest Version on Packagist](https://camo.githubusercontent.com/f3c2dc589023ca7247d4e305a79b28cccbb4536b8f4a94bc26605105d508ff68/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f686577657274686f6d6e2f6c61726176656c2d6572726f722d747261636b65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/hewerthomn/laravel-error-tracker)[![Total Downloads](https://camo.githubusercontent.com/9147d570e1c9721891d1fde9ca585bde78e892466f9ab607e5f0d64ec27f5211/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f686577657274686f6d6e2f6c61726176656c2d6572726f722d747261636b65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/hewerthomn/laravel-error-tracker)[![CI](https://github.com/hewerthomn/laravel-error-tracker/actions/workflows/ci.yml/badge.svg)](https://github.com/hewerthomn/laravel-error-tracker/actions/workflows/ci.yml)[![License](https://camo.githubusercontent.com/995aefe16ad39224a113c71dba78e69d2a5cdbc80a369d362936a7a54ba013bd/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f686577657274686f6d6e2f6c61726176656c2d6572726f722d747261636b65722e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/hewerthomn/laravel-error-tracker)[![PHP](https://camo.githubusercontent.com/43b5f348508a9137b6ea8cce60a491002f1b7fe8dfd9ff6f45a9541936f989ee/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d253545382e332d3737376262342e7376673f7374796c653d666c61742d737175617265)](composer.json)[![Laravel](https://camo.githubusercontent.com/e4f4474fd4421b9522d3ed1a544f8df3115cfd12083ff6293d45ea0e3c8dbdb3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3131253230253743253230313225323025374325323031332d6666326432302e7376673f7374796c653d666c61742d737175617265)](composer.json)[![Code Style](https://camo.githubusercontent.com/24451a00771e3003f0282685e6654ec15d6aed3116449285f8bc2f3969a005f8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64652532307374796c652d4c61726176656c25323050696e742d3264333734382e7376673f7374796c653d666c61742d737175617265)](https://laravel.com/docs/pint)

A Laravel-first error tracking package with a built-in dashboard, local persistence, issue grouping, notifications, smart stack traces, diagnostics, and optional end-user feedback.

Documentation
-------------

[](#documentation)

Full documentation is available at:

The README contains the quick start. The documentation site contains the full guide.

Features
--------

[](#features)

### Capture and storage

[](#capture-and-storage)

- Exception capture through Laravel's exception pipeline.
- Local database storage inside the project or in a shared external database.
- Issue grouping by fingerprint.
- Hourly trend aggregation.
- Optional shared tracker database connection for multiple applications or environments.

### Dashboard and search

[](#dashboard-and-search)

- Dashboard with grouped issues, filters, issue detail, and event detail.
- Advanced search with shareable GET query parameters.
- Configurable dashboard navigation back to the host application.
- Smart stack trace grouping with project frame highlighting.

### Issue workflow

[](#issue-workflow)

- Resolve, reopen, ignore, mute, and unmute issues.
- Optional auto resolve for stale open issues.
- Optional GitHub Issue Integration to create, link, refresh, and unlink GitHub issues.

### Notifications

[](#notifications)

- Mail and Slack notifications for new and reactivated issues.
- Optional notification cooldown to reduce noisy alerts.

### GitHub Issue Integration

[](#github-issue-integration)

GitHub issue links are optional and disabled by default. Configure a token with Issues read/write access and a default repository:

```
ERROR_TRACKER_GITHUB_ENABLED=false
ERROR_TRACKER_GITHUB_TOKEN=
ERROR_TRACKER_GITHUB_REPOSITORY=owner/repository
ERROR_TRACKER_GITHUB_LABELS=bug,error-tracker
```

When enabled, the issue detail page can create a GitHub issue or link an existing one, then refresh status from GitHub or unlink the local association. See the [full GitHub Issue Integration guide](docs/github-issue-integration.md).

### Feedback and error page

[](#feedback-and-error-page)

- Optional custom production error page.
- Optional end-user feedback form linked to recorded events.

### Diagnostics and maintenance

[](#diagnostics-and-maintenance)

- Configuration diagnostics for capture, feedback, notifications, stack trace, retention, redaction, and database health checks.
- Prune, auto resolve, demo data, and doctor Artisan commands.

Screenshots
-----------

[](#screenshots)

### Issues dashboard

[](#issues-dashboard)

[![Issues dashboard](docs/screenshots/dashboard-index.png)](docs/screenshots/dashboard-index.png)

### Issue detail

[](#issue-detail)

[![Issue detail](docs/screenshots/issue-detail.png)](docs/screenshots/issue-detail.png)

### Smart stack trace

[](#smart-stack-trace)

[![Smart stack trace](docs/screenshots/event-detail-smart-stacktrace.png)](docs/screenshots/event-detail-smart-stacktrace.png)

### Configuration diagnostics

[](#configuration-diagnostics)

[![Configuration diagnostics](docs/screenshots/configuration-diagnostics.png)](docs/screenshots/configuration-diagnostics.png)

Requirements
------------

[](#requirements)

- PHP 8.3+
- Laravel 11, 12, or 13
- A relational database supported by Laravel

Installation
------------

[](#installation)

### Default install

[](#default-install)

Install the package in your Laravel application, publish configuration and migrations, run migrations, and verify the setup:

```
composer require hewerthomn/laravel-error-tracker
php artisan error-tracker:install
php artisan migrate
php artisan error-tracker:doctor
```

The default installer is non-destructive. It publishes the package config and migrations, optionally asks to run migrations in interactive terminals, and prints the next recommended commands.

To generate demo data at the end of installation:

```
php artisan error-tracker:install --with-demo
```

### Guided install

[](#guided-install)

```
php artisan error-tracker:install --guided
```

The guided installer can suggest the main `.env` values for feedback, custom error pages, auto resolve, notifications, notification cooldown, smart stack trace, and database connection.

It does not edit `config/error-tracker.php` directly. To write missing `.env`values idempotently, pass `--write-env`.

### Presets

[](#presets)

```
php artisan error-tracker:install --preset=local
php artisan error-tracker:install --preset=production
php artisan error-tracker:install --preset=minimal
php artisan error-tracker:install --preset=demo
```

Available presets:

- `minimal`: feedback off, notifications off, auto resolve off, custom error page off, smart stack trace on.
- `local`: feedback on, notifications off, auto resolve off, custom error page on, smart stack trace on.
- `production`: feedback on, notifications on, auto resolve off, custom error page on, smart stack trace on, notification cooldown on.
- `demo`: feedback on, notifications off, auto resolve on, custom error page on, smart stack trace on, and demo data generation enabled.

Updating the package
--------------------

[](#updating-the-package)

New Error Tracker features can add database migrations. After updating the package, publish any new migrations, run them, clear optimized config, and run diagnostics:

```
composer update hewerthomn/laravel-error-tracker -W
php artisan vendor:publish --tag=error-tracker-migrations
php artisan migrate
php artisan optimize:clear
php artisan error-tracker:doctor
```

Examples of features that add schema are Auto Resolve metadata and Notification Cooldown history.

Basic Setup
-----------

[](#basic-setup)

### Define the dashboard gate

[](#define-the-dashboard-gate)

In your host application, define the `viewErrorTracker` gate:

```
use Illuminate\Support\Facades\Gate;

Gate::define('viewErrorTracker', function ($user = null) {
    return true;
});
```

Replace the example above with your real authorization logic.

### Minimal exception capture

[](#minimal-exception-capture)

Register exception capture in `bootstrap/app.php`:

```
use Hewerthomn\ErrorTracker\Actions\RecordThrowableAction;
use Illuminate\Foundation\Configuration\Exceptions;

->withExceptions(function (Exceptions $exceptions): void {
    $exceptions->dontReportDuplicates();

    $exceptions->report(function (\Throwable $e) {
        app(RecordThrowableAction::class)->handle($e);
    });
})
```

See [Custom Error Page and User Feedback](#custom-error-page-and-user-feedback)for a fuller `bootstrap/app.php` example that records the exception and renders the optional production error page with feedback.

Dashboard
---------

[](#dashboard)

By default, the dashboard is available at:

```
/error-tracker

```

The page title uses:

```
Error Tracker - {APP_NAME}

```

The dashboard also supports a configurable shortcut back to the host application.

### Dashboard quick filters

[](#dashboard-quick-filters)

The issues dashboard includes a left sidebar with quick filters for status, level, period, and environment.

The main issue list includes search for errors, paths, or messages, plus sorting by recent, frequent, or oldest issues. Filter links preserve the current query string, and status and level filters show counts for the current dashboard slice.

### Diagnostics page

[](#diagnostics-page)

The read-only diagnostics page is available at:

```
/error-tracker/configuration

```

If you customize `error-tracker.route.path`, the page follows that path, for example `/{custom-path}/configuration`.

The page shows the effective Error Tracker configuration for capture, feedback, auto resolve, notifications, stack trace, retention, redaction, and database health checks. It also shows command and scheduler hints for maintenance tasks.

Secrets are never displayed raw. Notification recipients, Slack webhook values, tokens, secrets, passwords, authorization headers, cookies, and API keys are rendered as `configured` or `not configured`.

Configuration
-------------

[](#configuration)

Main configuration file:

```
config/error-tracker.php

```

Important options include:

- `database.connection`
- `route.path`
- `dashboard.app_home_url`
- `capture.sample_rate`
- `fingerprint.include_environment`
- `notifications.channels`
- `notifications.cooldown_minutes`
- `notifications.max_per_issue_per_hour`
- `error_page.enabled`
- `feedback.enabled`
- `retention.events_days`
- `auto_resolve.enabled`
- `auto_resolve.after_days`
- `stacktrace.smart_grouping`
- `stacktrace.project_paths`
- `stacktrace.project_namespaces`
- `stacktrace.non_project_paths`
- `stacktrace.path_display`
- `stacktrace.store_absolute_paths`
- `stacktrace.source_context`
- `stacktrace.store_arguments`

Advanced search
---------------

[](#advanced-search)

The dashboard index uses GET query parameters, so filtered views can be shared or bookmarked:

```
/error-tracker?q=checkout%20status:open%20level:error&period=24h&sort=last_seen_at&direction=desc

```

The search box accepts free text plus operators.

Free text searches issue title, exception class, message sample, fingerprint, status, level, environment, and resolution metadata. Event and feedback tables are only queried when an operator requires them.

Supported operators:

```
status:open
status:resolved
level:error
level:critical
env:production
environment:staging
class:QueryException
exception:QueryException
message:timeout
fingerprint:abc123
route:users.store
path:/api/users
url:example.com
file:UserController.php
user:123
status_code:500
resolved:auto
resolved:manual
has:feedback

```

Values with spaces can be quoted:

```
message:"checkout timeout" status:open

```

The visual filters cover status, level, environment, period, resolution type, feedback presence, sort, and direction.

Active filters are shown as chips, and the Clear filters action returns to `/error-tracker` without query parameters. Inputs are validated against allowed values and applied through Eloquent query builder methods rather than raw SQL.

Smart Stack Trace
-----------------

[](#smart-stack-trace-1)

The event detail page highlights frames that belong to your project and groups consecutive framework, vendor, internal, or unknown frames into collapsed non-project blocks.

This keeps the most useful application code visible while still allowing framework/vendor details to be expanded when needed.

By default, project frames are detected from common Laravel paths and namespaces:

```
'stacktrace' => [
    'smart_grouping' => true,
    'project_paths' => [
        app_path(),
        base_path('routes'),
        base_path('database'),
        base_path('config'),
        base_path('packages'),
        base_path('modules'),
    ],
    'project_namespaces' => [
        'App\\',
        'Database\\',
    ],
    'non_project_paths' => [
        base_path('vendor'),
        base_path('storage/framework'),
        base_path('bootstrap/cache'),
    ],
    'collapse_non_project_frames' => true,
    'show_source_context' => true,
    'source_context_lines' => 5,
    'path_display' => env('ERROR_TRACKER_STACKTRACE_PATH_DISPLAY', 'relative'),
    'store_absolute_paths' => env('ERROR_TRACKER_STACKTRACE_STORE_ABSOLUTE_PATHS', false),
    'source_context' => [
        'enabled' => env('ERROR_TRACKER_SOURCE_CONTEXT_ENABLED', true),
        'lines_before' => 5,
        'lines_after' => 5,
        'max_frames' => 5,
        'project_only' => true,
        'fallback_to_throwing_frame' => true,
        'max_file_size_kb' => 512,
        'paths' => [
            app_path(),
            base_path('routes'),
            base_path('database'),
            base_path('config'),
            base_path('packages'),
            base_path('modules'),
        ],
        'excluded_paths' => [
            base_path('vendor'),
            storage_path(),
            base_path('bootstrap/cache'),
        ],
    ],
    'store_arguments' => false,
],
```

Function arguments are not stored or displayed by default for security.

Old traces that contain `args` or `arguments` are ignored by the presenter. Source context is only read from configured `stacktrace.project_paths`, never from `vendor` by default, and source lines containing tokens, passwords, secrets, authorization values, cookies, or `x-api-key` are masked before display.

Path normalization and source context
-------------------------------------

[](#path-normalization-and-source-context)

Error Tracker normalizes stack trace paths by default before storing or displaying them.

Absolute paths such as `/workspace/app/routes/web.php` are stored as `routes/web.php`, which avoids leaking server directory structure in the database or dashboard.

`stacktrace.path_display` accepts `relative`, `basename`, and `absolute`. The default is `relative`.

If `path_display` is set to `absolute` but `stacktrace.store_absolute_paths` is `false`, Error Tracker falls back to relative paths for safety.

Source context is enabled by default and stores a small snippet around eligible project stack frames.

When an exception is thrown inside Laravel or another dependency, Error Tracker marks the first project frame closest to the top of the stack as the application frame and uses that frame for the event location and primary source context. The original throwing frame is still kept in the stack trace and labeled separately when it comes from the framework.

Source context is limited to configured project paths, skips excluded paths such as `vendor`, `storage`, and `bootstrap/cache`, enforces a maximum file size, and does not read `.env`.

Missing or unreadable files simply return no context, so the dashboard keeps rendering. The dashboard escapes source lines when rendering them.

Available source context settings:

```
'source_context' => [
    'enabled' => env('ERROR_TRACKER_SOURCE_CONTEXT_ENABLED', true),
    'lines_before' => 5,
    'lines_after' => 5,
    'max_frames' => 5,
    'project_only' => true,
    'fallback_to_throwing_frame' => true,
    'max_file_size_kb' => 512,
    'paths' => [
        app_path(),
        base_path('routes'),
        base_path('database'),
        base_path('config'),
        base_path('packages'),
        base_path('modules'),
    ],
    'excluded_paths' => [
        base_path('vendor'),
        storage_path(),
        base_path('bootstrap/cache'),
    ],
],
```

Auto Resolve
------------

[](#auto-resolve)

Auto Resolve can close stale open issues when they have not received new events for a configured number of days.

The feature is disabled by default.

Default configuration:

```
'auto_resolve' => [
    'enabled' => env('ERROR_TRACKER_AUTO_RESOLVE_ENABLED', false),
    'after_days' => env('ERROR_TRACKER_AUTO_RESOLVE_AFTER_DAYS', 14),
    'statuses' => ['open'],
    'levels' => ['warning', 'error'],
    'environments' => null,
    'reason' => 'Automatically resolved after :days days without new events.',
],
```

Example scheduler registration:

```
use Illuminate\Support\Facades\Schedule;

Schedule::command('error-tracker:auto-resolve')->daily();
```

Preview eligible issues without changing the database:

```
php artisan error-tracker:auto-resolve --dry-run
```

Shared Database / Multi-App Setup
---------------------------------

[](#shared-database--multi-app-setup)

The package can optionally use a dedicated database connection:

```
'database' => [
    'connection' => env('ERROR_TRACKER_DB_CONNECTION'),
],
```

When this is configured, multiple applications may write to the same tracker storage.

In that setup, keeping `environment` visible in the dashboard and optionally including it in the fingerprint becomes more useful.

Notifications
-------------

[](#notifications-1)

Supported in the current MVP:

- Mail
- Slack

Mail notifications can be configured with:

```
ERROR_TRACKER_MAIL_TO=alerts@example.test
```

Slack delivery is optional and depends on Laravel's Slack notification channel setup in the host application.

Notification Cooldown
---------------------

[](#notification-cooldown)

Notification cooldown prevents a noisy issue from sending too many mail or Slack alerts in a short period.

The limiter is applied per issue and covers notifications for:

- `new_issue`
- `regression`
- `reactivated`

Default settings:

```
ERROR_TRACKER_NOTIFICATION_COOLDOWN_MINUTES=30
ERROR_TRACKER_NOTIFICATION_MAX_PER_ISSUE_PER_HOUR=3
```

`ERROR_TRACKER_NOTIFICATION_COOLDOWN_MINUTES` defines the minimum time between notifications for the same issue.

`ERROR_TRACKER_NOTIFICATION_MAX_PER_ISSUE_PER_HOUR` caps how many notifications a single issue can send in a rolling one-hour window.

Set either value to `0` or leave it `null` to disable that specific limit:

```
ERROR_TRACKER_NOTIFICATION_COOLDOWN_MINUTES=0
ERROR_TRACKER_NOTIFICATION_MAX_PER_ISSUE_PER_HOUR=0
```

The issue detail page shows recent notification metadata, and the configuration page shows the effective cooldown and hourly limit values.

Custom Error Page and User Feedback
-----------------------------------

[](#custom-error-page-and-user-feedback)

When enabled, the package can render a custom HTML error page only when:

- `APP_DEBUG=false`
- the request expects HTML
- the response is a server error

The optional feedback form is linked to the recorded event through `feedback_token`, so the feedback is associated with the issue occurrence that triggered the page.

The MVP feedback UI is Blade with lightweight Tailwind and Alpine.js usage, without Livewire.

Guest users can fill in name and email fields when guest feedback is allowed and those fields are enabled.

Authenticated users see name and email prefilled from their signed-in account as readonly fields. This is only a usability hint: the backend always uses `request()->user()` as the source of truth when available and ignores submitted name/email values for signed-in users.

### Optional custom error page with feedback

[](#optional-custom-error-page-with-feedback)

Register exception capture and the optional error page rendering in `bootstrap/app.php`:

```
use Hewerthomn\ErrorTracker\Actions\RecordThrowableAction;
use Hewerthomn\ErrorTracker\Support\ErrorPageState;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Request;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware): void {
        //
    })
    ->withExceptions(function (Exceptions $exceptions): void {
        $exceptions->dontReportDuplicates();

        $exceptions->report(function (\Throwable $e) {
            $result = app(RecordThrowableAction::class)->handle($e);

            if ($result) {
                app(ErrorPageState::class)->set($result);
            }
        });

        $exceptions->render(function (\Throwable $e, Request $request) {
            if (! config('error-tracker.error_page.enabled', true)) {
                return null;
            }

            if (
                config('error-tracker.error_page.only_when_debug_disabled', true) &&
                config('app.debug')
            ) {
                return null;
            }

            if (
                config('error-tracker.error_page.only_html_requests', true) &&
                $request->expectsJson()
            ) {
                return null;
            }

            $status = method_exists($e, 'getStatusCode')
                ? (int) $e->getStatusCode()
                : 500;

            if ($status < 500) {
                return null;
            }

            $result = app(ErrorPageState::class)->get();
            $event = $result?->event;
            $issue = $result?->issue;
            $user = $request->user();

            $showFeedbackForm =
                config('error-tracker.feedback.enabled', false) &&
                $event?->feedback_token &&
                (
                    $user ||
                    config('error-tracker.feedback.allow_guest', true)
                ) &&
                (
                    ! config('error-tracker.feedback.only_production', false) ||
                    app()->environment('production')
                );

            $feedbackName = $user ? data_get($user, 'name') : null;
            $feedbackEmail = $user ? data_get($user, 'email') : null;
            $isFeedbackUserAuthenticated = (bool) $user;
            $lockAuthenticatedUserFields = $isFeedbackUserAuthenticated;

            return response()->view('error-tracker::error.exception', [
                'title' => config('error-tracker.error_page.title', 'Something went wrong'),
                'message' => config(
                    'error-tracker.error_page.message',
                    'An unexpected error occurred. Please try again in a moment.'
                ),
                'showReference' => config('error-tracker.error_page.show_reference', true),
                'reference' => $event?->uuid,
                'event' => $event,
                'issue' => $issue,
                'showFeedbackForm' => $showFeedbackForm,
                'collectName' => config('error-tracker.feedback.collect_name', true),
                'collectEmail' => config('error-tracker.feedback.collect_email', true),
                'authenticatedUser' => $user,
                'feedbackUser' => $user,
                'feedbackName' => $feedbackName,
                'feedbackEmail' => $feedbackEmail,
                'isFeedbackUserAuthenticated' => $isFeedbackUserAuthenticated,
                'lockAuthenticatedUserFields' => $lockAuthenticatedUserFields,
                'pageUrl' => $request->fullUrl(),
            ], $status);
        });
    })
    ->create();
```

Demo data
---------

[](#demo-data)

Generate safe demo records for local testing and screenshots:

```
php artisan error-tracker:demo --fresh --with-feedback --with-notifications --with-resolved
```

Purge only demo data:

```
php artisan error-tracker:demo --purge
```

Demo data safety:

- Demo issue fingerprints start with `demo:`.
- Event context is marked with `_demo=true`.
- The command does not remove real data.

Available Commands
------------------

[](#available-commands)

CommandDescription`php artisan error-tracker:install`Publish config and migrations`php artisan error-tracker:install --guided`Run guided setup`php artisan error-tracker:demo --fresh --with-feedback --with-notifications --with-resolved`Generate demo data`php artisan error-tracker:demo --purge`Remove demo data only`php artisan error-tracker:doctor`Run diagnostics`php artisan error-tracker:doctor --json --fail-on-missing`JSON diagnostics for CI`php artisan error-tracker:prune`Prune old data`php artisan error-tracker:auto-resolve`Auto resolve stale issuesProduction checklist
--------------------

[](#production-checklist)

- Configure the `viewErrorTracker` gate.
- Keep `APP_DEBUG=false`.
- Review redaction rules.
- Review feedback settings.
- Configure mail or Slack notifications if needed.
- Run `php artisan error-tracker:doctor`.
- Schedule `error-tracker:prune`.
- Schedule `error-tracker:auto-resolve` if Auto Resolve is enabled.

Development
-----------

[](#development)

Run the test suite:

```
composer test
```

Check formatting:

```
composer format:test
```

Run static analysis:

```
composer analyse
```

### Code Style

[](#code-style)

Laravel Pint is the recommended formatter for this package.

Run Pint:

```
composer format
```

Check formatting without modifying files:

```
composer format:test
```

Local Sandbox
-------------

[](#local-sandbox)

The package can be developed with a local Laravel sandbox application using a Composer `path` repository so the sandbox consumes the package directly from disk.

Roadmap
-------

[](#roadmap)

Planned improvements after the MVP:

- Monolog channel integration
- Release markers
- Regression tracking
- Comments and assignees
- Better shared-storage multi-app support
- JavaScript error capture
- Breadcrumbs
- Webhooks

Changelog
---------

[](#changelog)

Please see [CHANGELOG.md](CHANGELOG.md) for more information about notable changes.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and pull request guidelines.

Security Vulnerabilities
------------------------

[](#security-vulnerabilities)

Please review [SECURITY.md](SECURITY.md) for supported versions, vulnerability reporting, and sensitive data guidance.

License
-------

[](#license)

MIT

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance97

Actively maintained with recent releases

Popularity11

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 87.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~11 days

Total

3

Last Release

14d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/80893d6848d5c4254f8954b2710868d97987a2c43a01616d1369a87470fc8c6d?d=identicon)[hewerthomn](/maintainers/hewerthomn)

---

Top Contributors

[![hewerthomn](https://avatars.githubusercontent.com/u/226773?v=4)](https://github.com/hewerthomn "hewerthomn (41 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (6 commits)")

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/hewerthomn-laravel-error-tracker/health.svg)

```
[![Health](https://phpackages.com/badges/hewerthomn-laravel-error-tracker/health.svg)](https://phpackages.com/packages/hewerthomn-laravel-error-tracker)
```

###  Alternatives

[spatie/laravel-health

Monitor the health of a Laravel application

88011.3M149](/packages/spatie-laravel-health)[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[defstudio/telegraph

A laravel facade to interact with Telegram Bots

815320.5k3](/packages/defstudio-telegraph)[spatie/laravel-pdf

Create PDFs in Laravel apps

1.0k4.3M41](/packages/spatie-laravel-pdf)[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)[illuminate/log

The Illuminate Log package.

6425.0M597](/packages/illuminate-log)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
