You are here

class LoggerChannel in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Logger/LoggerChannel.php \Drupal\Core\Logger\LoggerChannel

Defines a logger channel that most implementations will use.

Hierarchy

Expanded class hierarchy of LoggerChannel

1 file declares its use of LoggerChannel
LoggerChannelTest.php in core/tests/Drupal/Tests/Core/Logger/LoggerChannelTest.php
Contains \Drupal\Tests\Core\Logger\LoggerChannelTest.
2 string references to 'LoggerChannel'
contact.services.yml in core/modules/contact/contact.services.yml
core/modules/contact/contact.services.yml
core.services.yml in core/core.services.yml
core/core.services.yml
3 services use LoggerChannel
logger.channel.contact in core/modules/contact/contact.services.yml
Drupal\Core\Logger\LoggerChannel
logger.channel.file in core/core.services.yml
Drupal\Core\Logger\LoggerChannel
logger.channel_base in core/core.services.yml
Drupal\Core\Logger\LoggerChannel

File

core/lib/Drupal/Core/Logger/LoggerChannel.php, line 19
Contains \Drupal\Core\Logger\LoggerChannel.

Namespace

Drupal\Core\Logger
View source
class LoggerChannel implements LoggerChannelInterface {
  use LoggerTrait;

  /**
   * The name of the channel of this logger instance.
   *
   * @var string
   */
  protected $channel;

  /**
   * Map of PSR3 log constants to RFC 5424 log constants.
   *
   * @var array
   */
  protected $levelTranslation = array(
    LogLevel::EMERGENCY => RfcLogLevel::EMERGENCY,
    LogLevel::ALERT => RfcLogLevel::ALERT,
    LogLevel::CRITICAL => RfcLogLevel::CRITICAL,
    LogLevel::ERROR => RfcLogLevel::ERROR,
    LogLevel::WARNING => RfcLogLevel::WARNING,
    LogLevel::NOTICE => RfcLogLevel::NOTICE,
    LogLevel::INFO => RfcLogLevel::INFO,
    LogLevel::DEBUG => RfcLogLevel::DEBUG,
  );

  /**
   * An array of arrays of \Psr\Log\LoggerInterface keyed by priority.
   *
   * @var array
   */
  protected $loggers = array();

  /**
   * The request stack object.
   *
   * @var \Symfony\Component\HttpFoundation\RequestStack
   */
  protected $requestStack;

  /**
   * The current user object.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $currentUser;

  /**
   * Constructs a LoggerChannel object
   *
   * @param string $channel
   *   The channel name for this instance.
   */
  public function __construct($channel) {
    $this->channel = $channel;
  }

  /**
   * {@inheritdoc}
   */
  public function log($level, $message, array $context = array()) {

    // Merge in defaults.
    $context += array(
      'channel' => $this->channel,
      'link' => '',
      'user' => NULL,
      'uid' => 0,
      'request_uri' => '',
      'referer' => '',
      'ip' => '',
      'timestamp' => time(),
    );

    // Some context values are only available when in a request context.
    if ($this->requestStack && ($request = $this->requestStack
      ->getCurrentRequest())) {
      $context['request_uri'] = $request
        ->getUri();
      $context['referer'] = $request->headers
        ->get('Referer', '');
      $context['ip'] = $request
        ->getClientIP();
      if ($this->currentUser) {
        $context['user'] = $this->currentUser;
        $context['uid'] = $this->currentUser
          ->id();
      }
    }
    if (is_string($level)) {

      // Convert to integer equivalent for consistency with RFC 5424.
      $level = $this->levelTranslation[$level];
    }

    // Call all available loggers.
    foreach ($this
      ->sortLoggers() as $logger) {
      $logger
        ->log($level, $message, $context);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function setRequestStack(RequestStack $requestStack = NULL) {
    $this->requestStack = $requestStack;
  }

  /**
   * {@inheritdoc}
   */
  public function setCurrentUser(AccountInterface $current_user = NULL) {
    $this->currentUser = $current_user;
  }

  /**
   * {@inheritdoc}
   */
  public function setLoggers(array $loggers) {
    $this->loggers = $loggers;
  }

  /**
   * {@inheritdoc}
   */
  public function addLogger(LoggerInterface $logger, $priority = 0) {
    $this->loggers[$priority][] = $logger;
  }

  /**
   * Sorts loggers according to priority.
   *
   * @return array
   *   An array of sorted loggers by priority.
   */
  protected function sortLoggers() {
    $sorted = array();
    krsort($this->loggers);
    foreach ($this->loggers as $loggers) {
      $sorted = array_merge($sorted, $loggers);
    }
    return $sorted;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LoggerChannel::$channel protected property The name of the channel of this logger instance.
LoggerChannel::$currentUser protected property The current user object.
LoggerChannel::$levelTranslation protected property Map of PSR3 log constants to RFC 5424 log constants.
LoggerChannel::$loggers protected property An array of arrays of \Psr\Log\LoggerInterface keyed by priority.
LoggerChannel::$requestStack protected property The request stack object.
LoggerChannel::addLogger public function Adds a logger. Overrides LoggerChannelInterface::addLogger
LoggerChannel::log public function Logs with an arbitrary level. Overrides LoggerTrait::log
LoggerChannel::setCurrentUser public function Sets the current user. Overrides LoggerChannelInterface::setCurrentUser
LoggerChannel::setLoggers public function Sets the loggers for this channel. Overrides LoggerChannelInterface::setLoggers
LoggerChannel::setRequestStack public function Sets the request stack. Overrides LoggerChannelInterface::setRequestStack
LoggerChannel::sortLoggers protected function Sorts loggers according to priority.
LoggerChannel::__construct public function Constructs a LoggerChannel object
LoggerTrait::alert public function Action must be taken immediately.
LoggerTrait::critical public function Critical conditions.
LoggerTrait::debug public function Detailed debug information.
LoggerTrait::emergency public function System is unusable.
LoggerTrait::error public function Runtime errors that do not require immediate action but should typically be logged and monitored.
LoggerTrait::info public function Interesting events.
LoggerTrait::notice public function Normal but significant events.
LoggerTrait::warning public function Exceptional occurrences that are not errors.