Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
57.14% |
4 / 7 |
CRAP | |
82.86% |
29 / 35 |
LoggerChannel | |
0.00% |
0 / 1 |
|
57.14% |
4 / 7 |
14.99 | |
82.86% |
29 / 35 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
log | |
0.00% |
0 / 1 |
7.05 | |
90.00% |
18 / 20 |
|||
setRequestStack | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setCurrentUser | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
setLoggers | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
addLogger | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
sortLoggers | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Logger\LoggerChannel. | |
*/ | |
namespace Drupal\Core\Logger; | |
use Drupal\Core\Session\AccountInterface; | |
use Psr\Log\LoggerInterface; | |
use Psr\Log\LoggerTrait; | |
use Psr\Log\LogLevel; | |
use Symfony\Component\HttpFoundation\RequestStack; | |
/** | |
* Defines a logger channel that most implementations will use. | |
*/ | |
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(); | |
try { | |
if ($this->currentUser) { | |
$context['user'] = $this->currentUser; | |
$context['uid'] = $this->currentUser->id(); | |
} | |
} | |
catch (\Exception $e) { | |
// An exception might be thrown if the database connection is not | |
// available or due to another unexpected reason. It is more important | |
// to log the error that we already have so any additional exceptions | |
// are ignored. | |
} | |
} | |
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; | |
} | |
} |