Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Easy Log Bundle Laravel Package

systemsdk/easy-log-bundle

EasyLogBundle is a Symfony bundle that simplifies application logging with configurable channels, handlers, and structured output. Capture errors and events, attach useful context, and manage PSR-3-compatible logs with minimal setup for development and production.

View on GitHub
Deep Wiki
Context7

Getting Started

Know what you are installing first. The v2.1.0 note ("Improved bundle configuration for the latest Symfony framework") tells you this is a Symfony bundle, not a Laravel package. That distinction drives everything below: in a Laravel app you will not get auto-discovery, a config/ publish tag, or a ServiceProvider. You get a bundle class that expects a Symfony Kernel and a Configuration tree.

Start by confirming the shape of the dependency:

  1. composer require <vendor>/<package>:^2.1 — then immediately read the resulting composer.json diff. Check which symfony/framework-bundle, symfony/config, and symfony/dependency-injection constraints it pulled in. If it wants Symfony 7 components, verify they don't collide with the versions Laravel already ships transitively.
  2. Open these files in this order: README.md → composer.json → UPGRADE-2.0.md / CHANGELOG.md → src/DependencyInjection/Configuration.php → src/*Bundle.php. The Configuration.php tree is the contract; the changelog tells you whether v2.1.0 changed node names, defaults, or validation.
  3. Check for an AbstractBundle-style bundle class (getContainerExtension() returning null) versus the older Extension + Bundle pair. v2.1.0's "improved bundle configuration" almost certainly means the former, or a prependExtensionConfig() addition — that only matters if you extend or decorate the bundle.

First real use case: instantiate the bundle's underlying library directly in a tinker session or a test, without booting a Symfony kernel. Most Symfony bundles are thin DI wiring over a standalone component. If that works, you have a usable integration path even if you never register the bundle.

// app(Tests) — prove the payload works before fighting the container
$client = new Vendor\Package\Client(new Vendor\Package\Config([...]));
dump($client->call());

If the note matters to you at all, you are most likely in one of three situations: a legacy Symfony service inside a Laravel monolith, a shared internal package consumed by both frameworks, or a Laravel package that wraps the same vendor library. Read the rest of this assessment with your situation in mind.

Implementation Patterns

1. Consume the library, skip the bundle. This is the default recommendation for Laravel-only shops. Wire the vendor classes in a small ServiceProvider with explicit constructor arguments copied from the bundle's services.yaml. You lose bundle-level conveniences and gain an integration you can actually test.

final class VendorPackageServiceProvider extends ServiceProvider
{
    public function register(): void
    {
        $this->app->singleton(Vendor\Package\Client::class, fn ($app) => new Vendor\Package\Client(
            new Vendor\Package\Config(
                endpoint: config('services.vendor.endpoint'),
                timeout: config('services.vendor.timeout', 5),
            ),
            $app->make(GuzzleHttp\ClientInterface::class),
        ));
    }
}

2. Mirror the config tree in config/services.php. Whatever the bundle exposes under its root alias, translate 1:1 into a Laravel config file and validate it once at boot (a resolving() callback or a config DTO). This is where v2.1.0 bites: if the bundle tightened its tree — a renamed node, a now-required key, a changed default — a naive copy will silently diverge from upstream documentation.

3. Bridge into a real Symfony kernel only if you must. For hybrid apps, register the bundle in bundles.php and load config/packages/<alias>.yaml, then boot that kernel as a secondary container. Treat it as a separate application: its own cache directory, its own APP_ENV, its own warmup step in your deploy.

4. Pin and matrix-test the Symfony constraint. Because v2.1.0 is explicitly "for the latest Symfony framework", add a CI job that installs against both the minimum and maximum allowed Symfony versions (composer update --prefer-lowest alongside your normal install). Bundle config improvements are the classic source of "works on my lockfile" failures.

5. Wrap with a facade or adapter of your own. Anything you call day-to-day should go through your class, not the vendor's. When the bundle changes its config or bumps a major, you edit one file.

Gotchas and Tips

  • No auto-discovery. Laravel will not find this bundle. There is no extra.laravel.providers entry to lean on. If a README implies bin/console commands work, that is Symfony's console, not php artisan.
  • "Improved bundle configuration" usually means a config BC break. Improved almost always ships with normalisation changes: previously silently-accepted keys now throw InvalidConfigurationException, or ->cannotBeEmpty() was added. Run debug:config <alias> (Symfony) or diff your translated config array (Laravel) after upgrading.
  • Clear the container cache before debugging anything. A stale compiled container masks config changes. php artisan cache:clear for the Laravel side; bin/console cache:clear && bin/console cache:warmup for any Symfony kernel you boot. Most "the upgrade broke it" reports are stale cache.
  • Dependency-injection version skew is the real risk. Laravel pulls its own symfony/* components. Run composer why symfony/dependency-injection and composer outdated 'symfony/*' before and after the upgrade. A minor bundle release that requires a newer symfony/config will drag your whole tree forward.
  • Watch for recipe/Flex interference. If you use Symfony Flex anywhere in the repo, an updated recipe can silently overwrite config/packages/*.yaml. Commit those files and review the diff; do not let flex:sync run unattended.
  • Extension points worth knowing. If you need to influence config from your own code, prependExtensionConfig() on the extension and the Configuration tree's ->normalizeKeys(false) / ->ignoreExtraKeys() flags are the levers. v2.1.0 may have changed the defaults on these — read the diff, don't assume.
  • Debugging toolkit: bin/console debug:config <alias>, debug:container --tag=<tag>, and lint:container for Symfony-side issues; Illuminate\Container\Container::getBindings() and a dd() in your provider for the Laravel side. Compare the two when a value is unexpectedly null.
  • Upgrade cheaply. Because the payload is a Symfony config change, you can often stay on the prior minor and merely pin it ("<vendor>/<package>": "2.0.*") if you are on an older Symfony. Only adopt v2.1.0 when your Symfony components are current — that is what the release is for.
  • Treat this release as low-urgency for Laravel shops. Nothing here changes how you call the library day-to-day unless you actually register the bundle. Prioritise the upgrade by reading the changelog and Configuration.php diff, not by the version number.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums