function LoggerAwarePass::process

Same name and namespace in other branches
  1. 11.x 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.