return strtr($message, $replace);
}
+ /**
+ * JSON Encodes an complete array including objects with "__toString()" methods
+ *
+ * @param array $input an Input Array to encode
+ *
+ * @return false|string The json encoded output of the array
+ */
+ protected function jsonEncodeArray(array $input)
+ {
+ $output = [];
+
+ foreach ($input as $key => $value) {
+ if (method_exists($value, '__toString')) {
+ $output[$key] = $value->__toString();
+ } else {
+ $output[$key] = $value;
+ }
+ }
+
+ return @json_encode($output);
+ }
+
/**
* {@inheritdoc}
*/
$logMessage .= $this->channel . ' ';
$logMessage .= '[' . strtoupper($level) . ']: ';
$logMessage .= $this->psrInterpolate($message, $context) . ' ';
- $logMessage .= @json_encode($context) . ' - ';
- $logMessage .= @json_encode($record);
+ $logMessage .= $this->jsonEncodeArray($context) . ' - ';
+ $logMessage .= $this->jsonEncodeArray($record);
$logMessage .= PHP_EOL;
return $logMessage;
$logMessage .= $this->channel . ' ';
$logMessage .= '[' . $this->logToString[$level] . ']: ';
$logMessage .= $this->psrInterpolate($message, $context) . ' ';
- $logMessage .= @json_encode($context) . ' - ';
- $logMessage .= @json_encode($record);
+ $logMessage .= $this->jsonEncodeArray($context) . ' - ';
+ $logMessage .= $this->jsonEncodeArray($record);
return $logMessage;
}
self::assertContains(@json_encode($context), $text);
}
+
+ /**
+ * Test a message with an exception
+ */
+ public function testExceptionHandling()
+ {
+ $e = new \Exception("Test String", 123);
+ $eFollowUp = new \Exception("FollowUp", 456, $e);
+
+ $assertion = $eFollowUp->__toString();
+
+ $logger = $this->getInstance();
+ $logger->alert('test', ['e' => $eFollowUp]);
+ $text = $this->getContent();
+
+ self::assertLogline($text);
+
+ self::assertContains(@json_encode($assertion), $this->getContent());
+ }
}