function LoggerAwarePass::process

Same name in other branches
  1. 10 core/lib/Drupal/Core/DependencyInjection/Compiler/LoggerAwarePass.php \Drupal\Core\DependencyInjection\Compiler\LoggerAwarePass::process()

File

core/lib/Drupal/Core/DependencyInjection/Compiler/LoggerAwarePass.php, line 18

Class

LoggerAwarePass
Sets the logger on all services that implement LoggerAwareInterface.

Namespace

Drupal\Core\DependencyInjection\Compiler

Code

public function process(ContainerBuilder $container) : void {
    $interface = LoggerAwareInterface::class;
    foreach ($container->findTaggedServiceIds('logger_aware') as $id => $attributes) {
        $definition = $container->getDefinition($id);
        // Skip services that are already calling setLogger().
        if ($definition->hasMethodCall('setLogger')) {
            continue;
        }
        if (!is_subclass_of($definition->getClass(), $interface)) {
            throw new \InvalidArgumentException(sprintf('Service "%s" must implement interface "%s".', $id, $interface));
        }
        $providerTag = $definition->getTag('_provider');
        $loggerId = 'logger.channel.' . $providerTag[0]['provider'];
        if ($container->has($loggerId)) {
            $definition->addMethodCall('setLogger', [
                new Reference($loggerId),
            ]);
        }
    }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.