diff --git a/src/Bootstrappers/LogTenancyBootstrapper.php b/src/Bootstrappers/LogTenancyBootstrapper.php index 9c51c602..31f75667 100644 --- a/src/Bootstrappers/LogTenancyBootstrapper.php +++ b/src/Bootstrappers/LogTenancyBootstrapper.php @@ -100,7 +100,9 @@ class LogTenancyBootstrapper implements TenancyBootstrapper if (is_array($override)) { // Map tenant properties to channel config keys foreach ($override as $configKey => $tenantProperty) { - $this->config->set("logging.channels.{$channel}.{$configKey}", $tenant->$tenantProperty); + if ($tenant->$tenantProperty) { + $this->config->set("logging.channels.{$channel}.{$configKey}", $tenant->$tenantProperty); + } } } elseif ($override instanceof Closure) { // Execute custom configuration closure diff --git a/tests/Bootstrappers/LogTenancyBootstrapperTest.php b/tests/Bootstrappers/LogTenancyBootstrapperTest.php index e5282b9a..1efef35d 100644 --- a/tests/Bootstrappers/LogTenancyBootstrapperTest.php +++ b/tests/Bootstrappers/LogTenancyBootstrapperTest.php @@ -150,6 +150,20 @@ test('channel overrides work correctly with both arrays and closures', function expect(config('logging.channels.slack.username'))->toBe('Default'); }); +test('channel config keys remains unchanged if the specified tenant override property is not set', function() { + config(['logging.default' => 'slack']); + config(['logging.channels.slack.username' => 'Default username']); + + LogTenancyBootstrapper::$channelOverrides = [ + 'slack' => ['username' => 'nonExistentProperty'], // $tenant->nonExistentProperty + ]; + + tenancy()->initialize(Tenant::create()); + + // The username should remain unchanged since the tenant property is not set + expect(config('logging.channels.slack.username'))->toBe('Default username'); +}); + test('channel overrides take precedence over the default storage path channel updating logic', function () { config(['logging.default' => 'single']);