getMessage(); $context = $record->getContext(); // Platzhalter ersetzen, falls vorhanden if (str_contains($message, '{')) { $message = $this->interpolate($message, $context); $record->setMessage($message); } return $record; } /** * Platzhalter im Log-Text ersetzen */ private function interpolate(string $message, array $context): string { // Platzhalter ersetzen (Format: {key}) $replace = []; foreach ($context as $key => $val) { if ($val === null || is_scalar($val) || (is_object($val) && method_exists($val, '__toString'))) { $replace['{' . $key . '}'] = $val; } elseif ($val instanceof \Throwable) { $replace['{' . $key . '}'] = $val->getMessage() . ' in ' . $val->getFile() . ':' . $val->getLine(); } elseif (is_object($val)) { $replace['{' . $key . '}'] = '[object ' . get_class($val) . ']'; } elseif (is_array($val)) { $replace['{' . $key . '}'] = 'array' . json_encode($val, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR); } else { $replace['{' . $key . '}'] = '[' . gettype($val) . ']'; } } return strtr($message, $replace); } /** * Gibt die Priorität des Processors zurück */ public function getPriority(): int { return self::PRIORITY; } /** * Gibt einen eindeutigen Namen für den Processor zurück */ public function getName(): string { return 'interpolation'; } }