|
|
@@ -20,6 +20,8 @@ use Monolog\Utils;
|
|
|
* @see http://docs.graylog.org/en/latest/pages/gelf.html
|
|
|
*
|
|
|
* @author Matt Lehner <mlehner@gmail.com>
|
|
|
+ *
|
|
|
+ * @phpstan-import-type Level from \Monolog\Logger
|
|
|
*/
|
|
|
class GelfMessageFormatter extends NormalizerFormatter
|
|
|
{
|
|
|
@@ -49,6 +51,8 @@ class GelfMessageFormatter extends NormalizerFormatter
|
|
|
* Translates Monolog log levels to Graylog2 log priorities.
|
|
|
*
|
|
|
* @var array<int, int>
|
|
|
+ *
|
|
|
+ * @phpstan-var array<Level, int>
|
|
|
*/
|
|
|
private $logLevels = [
|
|
|
Logger::DEBUG => 7,
|
|
|
@@ -65,7 +69,7 @@ class GelfMessageFormatter extends NormalizerFormatter
|
|
|
{
|
|
|
parent::__construct('U.u');
|
|
|
|
|
|
- $this->systemName = (is_null($systemName) || $systemName === '') ? gethostname() : $systemName;
|
|
|
+ $this->systemName = (is_null($systemName) || $systemName === '') ? (string) gethostname() : $systemName;
|
|
|
|
|
|
$this->extraPrefix = is_null($extraPrefix) ? '' : $extraPrefix;
|
|
|
$this->contextPrefix = $contextPrefix;
|
|
|
@@ -73,15 +77,18 @@ class GelfMessageFormatter extends NormalizerFormatter
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * {@inheritdoc}
|
|
|
+ * {@inheritDoc}
|
|
|
*/
|
|
|
public function format(array $record): Message
|
|
|
{
|
|
|
+ $context = $extra = [];
|
|
|
if (isset($record['context'])) {
|
|
|
- $record['context'] = parent::format($record['context']);
|
|
|
+ /** @var mixed[] $context */
|
|
|
+ $context = parent::normalize($record['context']);
|
|
|
}
|
|
|
if (isset($record['extra'])) {
|
|
|
- $record['extra'] = parent::format($record['extra']);
|
|
|
+ /** @var mixed[] $extra */
|
|
|
+ $extra = parent::normalize($record['extra']);
|
|
|
}
|
|
|
|
|
|
if (!isset($record['datetime'], $record['message'], $record['level'])) {
|
|
|
@@ -105,31 +112,31 @@ class GelfMessageFormatter extends NormalizerFormatter
|
|
|
if (isset($record['channel'])) {
|
|
|
$message->setFacility($record['channel']);
|
|
|
}
|
|
|
- if (isset($record['extra']['line'])) {
|
|
|
- $message->setLine($record['extra']['line']);
|
|
|
- unset($record['extra']['line']);
|
|
|
+ if (isset($extra['line'])) {
|
|
|
+ $message->setLine($extra['line']);
|
|
|
+ unset($extra['line']);
|
|
|
}
|
|
|
- if (isset($record['extra']['file'])) {
|
|
|
- $message->setFile($record['extra']['file']);
|
|
|
- unset($record['extra']['file']);
|
|
|
+ if (isset($extra['file'])) {
|
|
|
+ $message->setFile($extra['file']);
|
|
|
+ unset($extra['file']);
|
|
|
}
|
|
|
|
|
|
- foreach ($record['extra'] as $key => $val) {
|
|
|
+ foreach ($extra as $key => $val) {
|
|
|
$val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
|
|
|
$len = strlen($this->extraPrefix . $key . $val);
|
|
|
if ($len > $this->maxLength) {
|
|
|
- $message->setAdditional($this->extraPrefix . $key, Utils::substr($val, 0, $this->maxLength));
|
|
|
+ $message->setAdditional($this->extraPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength));
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
$message->setAdditional($this->extraPrefix . $key, $val);
|
|
|
}
|
|
|
|
|
|
- foreach ($record['context'] as $key => $val) {
|
|
|
+ foreach ($context as $key => $val) {
|
|
|
$val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
|
|
|
$len = strlen($this->contextPrefix . $key . $val);
|
|
|
if ($len > $this->maxLength) {
|
|
|
- $message->setAdditional($this->contextPrefix . $key, Utils::substr($val, 0, $this->maxLength));
|
|
|
+ $message->setAdditional($this->contextPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength));
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
@@ -137,8 +144,8 @@ class GelfMessageFormatter extends NormalizerFormatter
|
|
|
}
|
|
|
|
|
|
/** @phpstan-ignore-next-line */
|
|
|
- if (null === $message->getFile() && isset($record['context']['exception']['file'])) {
|
|
|
- if (preg_match("/^(.+):([0-9]+)$/", $record['context']['exception']['file'], $matches)) {
|
|
|
+ if (null === $message->getFile() && isset($context['exception']['file'])) {
|
|
|
+ if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) {
|
|
|
$message->setFile($matches[1]);
|
|
|
$message->setLine($matches[2]);
|
|
|
}
|