NewRelicLogger.php in New Relic 8
File
src/Logger/NewRelicLogger.php
View source
<?php
namespace Drupal\new_relic_rpm\Logger;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Logger\LogMessageParserInterface;
use Drupal\Core\Logger\RfcLogLevel;
use Drupal\new_relic_rpm\ExtensionAdapter\NewRelicAdapterInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerTrait;
class NewRelicLogger implements LoggerInterface {
use LoggerTrait;
protected $parser;
protected $adapter;
protected $configFactory;
protected $lastLoggedLevel = 8;
public function __construct(LogMessageParserInterface $parser, NewRelicAdapterInterface $adapter, ConfigFactoryInterface $config_factory) {
$this->parser = $parser;
$this->adapter = $adapter;
$this->configFactory = $config_factory;
}
private function shouldLog($level) {
if ($level > $this->lastLoggedLevel) {
return FALSE;
}
$validLevels = $this->configFactory
->get('new_relic_rpm.settings')
->get('watchdog_severities') ?: [];
return in_array($level, $validLevels);
}
private function getSeverityName($level) {
$levels = RfcLogLevel::getLevels();
if (isset($levels[$level])) {
return $levels[$level]
->getUntranslatedString();
}
return 'Unknown';
}
public function log($level, $message, array $context = []) {
if (!$this
->shouldLog($level)) {
return;
}
$this->lastLoggedLevel = $level;
if (isset($context['exception'])) {
$this->adapter
->logException($context['exception']);
return;
}
$format = "@message | Severity: (@severity) @severity_desc | Type: @type | Request URI: @request_uri | Referrer URI: @referer_uri | User: @uid | IP Address: @ip";
$message_placeholders = $this->parser
->parseMessagePlaceholders($message, $context);
$message = strtr($format, [
'@severity' => $level,
'@severity_desc' => $this
->getSeverityName($level),
'@type' => $context['channel'],
'@ip' => $context['ip'],
'@request_uri' => $context['request_uri'],
'@referer_uri' => $context['referer'],
'@uid' => $context['uid'],
'@message' => strip_tags(strtr($message, $message_placeholders)),
]);
$this->adapter
->logError($message);
}
}
Classes
Name |
Description |
NewRelicLogger |
A Logger that allows sending messages to the New Relic API. |