novora/kaizen-bundle
Novora Kaizen Bundle is a Laravel/PHP package that brings Kaizen continuous-improvement tooling into your applications. It provides a configurable bundle for integrating Kaizen features with minimal setup, aimed at developers who want reusable, Laravel-friendly components.
First, check the stack mismatch. Novora KaizenBundle v1.0.0 is a Symfony bundle, not a Laravel package — it requires Symfony 7.4/8.x, TwigBundle and SecurityBundle, and registers itself via Symfony's bundle/kernel config. There is no service provider, no config/kaizen.php, and no Artisan commands, so composer require novora/kaizen-bundle inside a Laravel app will not give you a working install even though Laravel 11/12 already ship Monolog 3.
Practical first steps for a Laravel team:
composer require novora/kaizen-bundle:^1.0, enable the bundle, mount your Laravel log directory read-only into it.storage/logs/laravel.log (or a few laravel-YYYY-MM-DD.log files) and run the Pareto analysis to see which recurring error signatures dominate the last week. That alone answers "what should we fix first" without adding Sentry/Bugsnag.Do not attempt step 1 in production. Treat this as an internal, authenticated tool.
Sidecar ops app (recommended). Run the bundle as a separate Symfony container that bind-mounts storage/logs read-only from your Laravel hosts (or an S3/rsync pull of rotated logs). It stays out of the Laravel dependency graph entirely, which avoids version conflicts with Twig/Security and keeps the bundle's local file storage off your app servers.
Log ingestion pipeline. Laravel's default single/daily channels use Monolog's LineFormatter, which is close to but not identical to the default Monolog line format the bundle expects. Normalise before analysis: either add a dedicated Laravel logging channel that writes plain Monolog-formatted lines to a file the bundle reads, or pre-process with a small script. A custom channel is cleaner and is the main extension point you have:
// config/logging.php
'kaizen' => [
'driver' => 'daily',
'path' => storage_path('logs/kaizen.log'),
'level' => 'warning',
'formatter' => Monolog\Formatter\LineFormatter::class,
'formatter_with' => ['format' => "[%datetime%] %channel%.%level_name%: %message% %context%\n"],
],
Execution correlation. The HTTP/CLI/Messenger grouping maps onto Laravel's HTTP requests, artisan invocations, and queue workers. To get correlation value, make sure your log context includes a request/job identifier consistently (e.g. push a request_id/job_uuid via a Monolog processor or Log::withContext()), otherwise the correlation view will only group by timestamp proximity.
PDCA loop in practice. Snapshot the Pareto output before a fix ("before" observations), record the corrective action and hypothesis (Ishikawa/5 Whys) in the bundle, deploy, then re-run analysis against logs from after the deploy window and compare. Keep the comparison window explicit — the bundle compares available samples, not full history, so a quiet weekend can fake a "resolved".
Where it fits in the workflow. Use it during incident review and sprint triage, not for alerting. Pair it with your existing error tracker: the tracker tells you that something broke; Kaizen's Pareto tells you which recurring class of thing is worth a ticket. Feed findings into your backlog rather than replacing observability.
composer show monolog/monolog before assuming compatibility anywhere.daily channel rotates and its formatter includes %context%/%extra% arrays; multi-line stack traces also break line-based pattern grouping. Test the Pareto output against known log content before trusting counts.daily retention (LOG_DAILY_DAYS, default 14) means your "before" data can rotate away mid-investigation — archive logs before starting a PDCA cycle.stderr as JSON for a log aggregator (common on Kubernetes/Lambda), there may be no file on disk to analyse. You'll need to export from the aggregator into Monolog-formatted files first.error/critical first; debug-level noise will swamp the Pareto chart and produce meaningless top patterns.^1.0 and watch the changelog for v1.x breakage.How can I help you explore Laravel packages today?