config = $config_factory->get('syslog.settings'); $this->parser = $parser; } /** * Opens a connection to the system logger. */ protected function openConnection() { if (!$this->connectionOpened) { $facility = $this->config->get('facility'); $this->connectionOpened = openlog($this->config->get('identity'), LOG_NDELAY, $facility); } } /** * {@inheritdoc} */ public function log($level, $message, array $context = []) { global $base_url; // Ensure we have a connection available. $this->openConnection(); // Populate the message placeholders and then replace them in the message. $message_placeholders = $this->parser->parseMessagePlaceholders($message, $context); $message = empty($message_placeholders) ? $message : strtr($message, $message_placeholders); $entry = strtr($this->config->get('format'), [ '!base_url' => $base_url, '!timestamp' => $context['timestamp'], '!type' => $context['channel'], '!ip' => $context['ip'], '!request_uri' => $context['request_uri'], '!referer' => $context['referer'], '!uid' => $context['uid'], '!link' => strip_tags($context['link']), '!message' => strip_tags($message), ]); $this->syslogWrapper($level, $entry); } /** * A syslog wrapper to make syslog functionality testable. * * @param int $level * The syslog priority. * @param string $entry * The message to send to syslog function. */ protected function syslogWrapper($level, $entry) { syslog($level, $entry); } }