ezehky/ezehstart
ezehky/ezehstart is a Laravel/PHP starter package designed to speed up new project setup. It offers a simple foundation for bootstrapping applications, reducing repetitive configuration and boilerplate so developers can move faster from initial scaffold to working features.
ezehstart 2.2.1 is a non-breaking follow-up to 2.2.0 — no migrations, no renames. First step after upgrading is to rebuild the config cache so the new payments log channel is registered:
composer update
php artisan config:cache # required if you cache config
Then look in three places:
config/logging.php — the new payments channel is registered here. Confirm it's present and that its path resolves to storage/logs/payments.log. If you have a custom logging config that overrides the package's stack, diff it against the published version.payments now appears as a selectable source alongside the main log. This is the fastest way to confirm the channel is wired up without tailing files.First use case: run the reconcile sweep and hourly sync in a staging environment and watch storage/logs/payments.log fill. Before 2.2.1 those failures were only visible as a number in the command output; now you get a line per failure you can actually act on.
Reading the payments log. Use the channel explicitly rather than the default:
Log::channel('payments')->info('...');
For your own payment code, prefer writing to the same channel so the admin Logs screen shows one coherent stream. Keep the message shape consistent with the package's own entries — record id, vendor, error — so grep and the log viewer stay useful.
Wiring the log into alerting. Anything you previously tailed from laravel.log for payment problems needs to be re-pointed. The webhook-retRY-exhaustion, payment-trace-write-failure, and production signature-check-disabled warning all moved or were added to payments.log. If you ship logs to an external aggregator, add storage/logs/payments.log as a source; otherwise these failures become silent.
Monitoring the sweeps. The reconcile sweep and hourly sync now log each unverifiable checkout and each subscription that fails to refresh. Treat a non-zero count as a summary and the log lines as the detail — alert on count, triage from the log. This is the single biggest day-to-day win in the release.
Public pages are now full page loads. The home page, blog, site header, and two-factor challenge no longer use wire:navigate. Anything you attached to Livewire's navigation events on those pages will stop firing:
livewire:navigated listeners for analytics pageviews, scroll restoration, or re-initialising third-party widgets<head> never reloads (script tags re-execute now)Move those hooks to DOMContentLoaded / a plain load listener for public pages, and leave the Livewire navigation listeners for admin and member dashboard code where the behaviour is unchanged.
Two-factor challenge. It now loads as a full page. If you had custom redirect logic or JS that assumed a soft navigation into the challenge, re-test the 2FA flow end to end — especially any "return to intended URL" handling that relied on client-side state surviving navigation.
Extending. The admin Logs screen picking up payments for free means you don't need to build a payment-specific viewer. If you add your own channels later, register them the same way the package does and they should surface there too.
config:cache is the one real trap. The channel registration lives in config; with a stale cache the payments channel won't exist, the admin Logs screen won't list it, and you may see a Log [payments] is not defined style error the first time a payment fails. Rebuild after every deploy that touches config.payments.log. Any alert rule or dashboard keyed on those strings in laravel.log will go quiet without warning.wire:navigate to public pages casually. The change looks cosmetic but is deliberate; reinstating it will bring back whatever problem prompted the revert, and your JS lifecycle assumptions will silently change again.daily on the main channel, check the new channel's driver matches your retention policy.wire:navigate behaviour still applies there, so keep those event listeners where they are. Splitting the two behaviours in your JS is the cleanest approach: full-load initialisation for public, Livewire navigation hooks for authenticated areas.How can I help you explore Laravel packages today?