class LoggerChannel
Same name in other branches
- 9 core/lib/Drupal/Core/Logger/LoggerChannel.php \Drupal\Core\Logger\LoggerChannel
- 8.9.x core/lib/Drupal/Core/Logger/LoggerChannel.php \Drupal\Core\Logger\LoggerChannel
- 10 core/lib/Drupal/Core/Logger/LoggerChannel.php \Drupal\Core\Logger\LoggerChannel
Defines a logger channel that most implementations will use.
Hierarchy
- class \Drupal\Core\Logger\LoggerChannel implements \Drupal\Core\Logger\LoggerChannelInterface uses \Psr\Log\LoggerTrait
Expanded class hierarchy of LoggerChannel
2 files declare their use of LoggerChannel
- LoggerChannelTest.php in core/
tests/ Drupal/ Tests/ Core/ Logger/ LoggerChannelTest.php - TestSystemLoggerChannel.php in core/
modules/ system/ tests/ modules/ advisory_feed_test/ src/ TestSystemLoggerChannel.php
1 string reference to 'LoggerChannel'
- contact.services.yml in core/
modules/ contact/ contact.services.yml - core/modules/contact/contact.services.yml
1 service uses LoggerChannel
- logger.channel.contact in core/
modules/ contact/ contact.services.yml - Drupal\Core\Logger\LoggerChannel
File
-
core/
lib/ Drupal/ Core/ Logger/ LoggerChannel.php, line 14
Namespace
Drupal\Core\LoggerView source
class LoggerChannel implements LoggerChannelInterface {
use LoggerTrait;
/**
* Maximum call depth to self::log() for a single log message.
*
* It's very easy for logging channel code to call out to other library code
* that will create log messages. In that case, we will recurse back in to
* LoggerChannel::log() multiple times while processing a single originating
* message. To prevent infinite recursion, we track the call depth and bail
* out at LoggerChannel::MAX_CALL_DEPTH iterations.
*
* @var int
*/
const MAX_CALL_DEPTH = 5;
/**
* Number of times LoggerChannel::log() has been called for a single message.
*
* @var int
*/
protected $callDepth = 0;
/**
* 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 = [
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 = [];
/**
* 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, string|\Stringable $message, array $context = []) : void {
if ($this->callDepth == self::MAX_CALL_DEPTH) {
return;
}
$this->callDepth++;
// Merge in defaults.
$context += [
'channel' => $this->channel,
'link' => '',
'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['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);
}
$this->callDepth--;
}
/**
* {@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() {
krsort($this->loggers);
return array_merge(...$this->loggers);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
LoggerChannel::$callDepth | protected | property | Number of times LoggerChannel::log() has been called for a single message. | ||
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 | 1 | ||
LoggerChannel::MAX_CALL_DEPTH | constant | Maximum call depth to self::log() for a single log message. | |||
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. | 1 |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.