PHPackages                             abdasis/logpulse - 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. abdasis/logpulse

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

abdasis/logpulse
================

Laravel error observability dashboard with Sentry-inspired UI for viewing and investigating error logs.

40TypeScript

Since Apr 4Pushed 1mo agoCompare

[ Source](https://github.com/abdasis/logpulse)[ Packagist](https://packagist.org/packages/abdasis/logpulse)[ RSS](/packages/abdasis-logpulse/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

LogPulse
========

[](#logpulse)

Laravel error observability dashboard with a Sentry-inspired UI for viewing and investigating error logs.

LogPulse scans your Laravel log files, groups similar errors into **issues**, tracks **events** over time, and provides a clean dashboard to investigate stack traces, request context, and error trends.

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

[](#requirements)

- PHP 8.2+
- Laravel 11 or 12
- Inertia.js v2 with React

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

[](#installation)

```
composer require abdasis/logpulse
```

Publish the config file:

```
php artisan vendor:publish --tag=logpulse-config
```

Run migrations:

```
php artisan migrate
```

Publish the frontend pages (Inertia/React):

```
php artisan vendor:publish --tag=logpulse-pages
```

This copies the dashboard pages to `resources/js/pages/admin/logpulse/`.

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

[](#configuration)

After publishing, the config file is at `config/logpulse.php`:

```
return [
    // Database connection (null = default app connection)
    'connection' => env('LOGPULSE_DB_CONNECTION', null),

    // Route prefix
    'prefix' => 'cat-admin/logpulse',

    // Route middleware
    'middleware' => ['web', 'auth.admin'],

    // Directories to scan for log files
    'log_paths' => [
        storage_path('logs'),
    ],

    // Glob pattern for log files
    'log_pattern' => 'laravel*.log',

    // Scanner position tracking file
    'position_file' => storage_path('logpulse/scanner-positions.json'),

    // Days to keep events before pruning
    'retention_days' => 30,
];
```

### Database Connection

[](#database-connection)

By default LogPulse uses your app's default database connection. To use a separate database (e.g. SQLite), set the `LOGPULSE_DB_CONNECTION` env variable and add the corresponding connection in `config/database.php`.

### Route Prefix &amp; Middleware

[](#route-prefix--middleware)

Customize the `prefix` and `middleware` to match your application's admin route structure.

Usage
-----

[](#usage)

### Scanning Logs

[](#scanning-logs)

Scan your log files and aggregate errors into issues:

```
php artisan logpulse:scan
```

The scanner tracks file positions, so subsequent runs only process new log entries. It also detects log rotation automatically.

For continuous monitoring, schedule the command in your `routes/console.php`:

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

Schedule::command('logpulse:scan')->everyFiveMinutes();
```

### Pruning Old Events

[](#pruning-old-events)

Remove events older than the configured retention period:

```
php artisan logpulse:prune
```

Override the retention period:

```
php artisan logpulse:prune --days=7
```

### Dashboard

[](#dashboard)

Visit the dashboard at your configured prefix (default: `/cat-admin/logpulse`). The dashboard provides:

- **Log file browser** -- Select and browse individual log files
- **Search &amp; filter** -- Filter by log level, search by message or exception class
- **Pagination** -- Navigate through large log files

### Issue Detail

[](#issue-detail)

Each issue page shows:

- Exception class, message, file, and line number
- Full stack trace with vendor frame highlighting
- Event timeline chart (last 14 days)
- Request context (method, URL, headers, body)
- Actions: resolve, reopen, archive, delete

How It Works
------------

[](#how-it-works)

1. **LogScanner** reads log files from configured paths, tracking file positions to avoid re-processing
2. **LogParser** extracts structured data (level, message, exception, stack trace, timestamp) from raw log entries
3. **Fingerprinter** generates a unique hash for each error based on exception class, file, line, and normalized message
4. **LogAggregator** groups parsed entries into issues by fingerprint and stores individual events
5. Resolved issues are automatically reopened if the same error reappears

Database Tables
---------------

[](#database-tables)

LogPulse creates two prefixed tables to avoid conflicts:

- `logpulse_issues` -- Grouped error issues with fingerprint, status, and event count
- `logpulse_events` -- Individual error occurrences with full context

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for details.

###  Health Score

20

—

LowBetter than 14% of packages

Maintenance60

Regular maintenance activity

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/8faab912cbce66498f4d25247b5a340a5ed4b1645cc30ffda61cdb10fb1e2fb8?d=identicon)[abdasis](/maintainers/abdasis)

---

Top Contributors

[![abdasis](https://avatars.githubusercontent.com/u/34927165?v=4)](https://github.com/abdasis "abdasis (3 commits)")

### Embed Badge

![Health badge](/badges/abdasis-logpulse/health.svg)

```
[![Health](https://phpackages.com/badges/abdasis-logpulse/health.svg)](https://phpackages.com/packages/abdasis-logpulse)
```

###  Alternatives

[psr/log

Common interface for logging libraries

10.4k1.2B9.2k](/packages/psr-log)[itsgoingd/clockwork

php dev tools in your browser

5.9k27.6M94](/packages/itsgoingd-clockwork)[graylog2/gelf-php

A php implementation to send log-messages to a GELF compatible backend like Graylog2.

41838.2M138](/packages/graylog2-gelf-php)[bugsnag/bugsnag-psr-logger

Official Bugsnag PHP PSR Logger.

32132.5M2](/packages/bugsnag-bugsnag-psr-logger)[consolidation/log

Improved Psr-3 / Psr\\Log logger based on Symfony Console components.

15462.2M7](/packages/consolidation-log)[ekino/newrelic-bundle

Integrate New Relic into Symfony2

28111.2M8](/packages/ekino-newrelic-bundle)

PHPackages © 2026

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