diff --git a/src/Monolog/Formatter/LineFormatter.php b/src/Monolog/Formatter/LineFormatter.php index 12363ea3..6983d1a5 100644 --- a/src/Monolog/Formatter/LineFormatter.php +++ b/src/Monolog/Formatter/LineFormatter.php @@ -73,7 +73,7 @@ class LineFormatter extends NormalizerFormatter foreach ($vars['extra'] as $var => $val) { if (false !== strpos($output, '%extra.'.$var.'%')) { - $output = str_replace('%extra.'.$var.'%', $this->replaceNewlines($this->convertToString($val)), $output); + $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output); unset($vars['extra'][$var]); } } @@ -92,7 +92,7 @@ class LineFormatter extends NormalizerFormatter foreach ($vars as $var => $val) { if (false !== strpos($output, '%'.$var.'%')) { - $output = str_replace('%'.$var.'%', $this->replaceNewlines($this->convertToString($val)), $output); + $output = str_replace('%'.$var.'%', $this->stringify($val), $output); } } @@ -109,6 +109,11 @@ class LineFormatter extends NormalizerFormatter return $message; } + public function stringify($value) + { + return $this->replaceNewlines($this->convertToString($value)); + } + protected function normalizeException(Exception $e) { $previousText = ''; diff --git a/src/Monolog/Handler/SlackHandler.php b/src/Monolog/Handler/SlackHandler.php index 178ab58b..e3c8e11b 100644 --- a/src/Monolog/Handler/SlackHandler.php +++ b/src/Monolog/Handler/SlackHandler.php @@ -12,6 +12,7 @@ namespace Monolog\Handler; use Monolog\Logger; +use Monolog\Formatter\LineFormatter; /** * Sends notifications through Slack API @@ -63,6 +64,11 @@ class SlackHandler extends SocketHandler */ private $includeExtra; + /** + * @var LineFormatter + */ + private $lineFormatter; + /** * @param string $token Slack API token * @param string $channel Slack channel (encoded ID or name) @@ -87,6 +93,9 @@ class SlackHandler extends SocketHandler $this->useAttachment = $useAttachment; $this->useShortAttachment = $useShortAttachment; $this->includeExtra = $includeExtra; + if ($this->includeExtra) { + $this->lineFormatter = new LineFormatter; + } } /** @@ -118,15 +127,7 @@ class SlackHandler extends SocketHandler 'attachments' => array() ); - $extra = ''; - foreach ($record['extra'] as $var => $val) { - $extra .= $var.': '.$this->replaceNewlines($this->convertToString($val))." | "; - } - - $extra = rtrim($extra, " |"); - if ($this->useAttachment) { - $attachment = array( 'fallback' => $record['message'], 'color' => $this->getAttachmentColor($record['level']) @@ -156,6 +157,13 @@ class SlackHandler extends SocketHandler } if ($this->includeExtra) { + $extra = ''; + foreach ($record['extra'] as $var => $val) { + $extra .= $var.': '.$this->lineFormatter->stringify($val)." | "; + } + + $extra = rtrim($extra, " |"); + $attachment['fields'][] = array( 'title' => "Extra", 'value' => $extra, @@ -223,54 +231,4 @@ class SlackHandler extends SocketHandler return '#e3e4e6'; } } - - /** - * Copy from LineFormater (any better idea?) - */ - protected function convertToString($data) - { - if (null === $data || is_bool($data)) { - return var_export($data, true); - } - - if (is_scalar($data)) { - return (string) $data; - } - - if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - return $this->toJson($data, true); - } - - return str_replace('\\/', '/', @json_encode($data)); - } - - - /** - * Copy from LineFormater (any better idea?) - */ - protected function toJson($data, $ignoreErrors = false) - { - // suppress json_encode errors since it's twitchy with some inputs - if ($ignoreErrors) { - if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - return @json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); - } - - return @json_encode($data); - } - - if (version_compare(PHP_VERSION, '5.4.0', '>=')) { - return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); - } - - return json_encode($data); - } - - /** - * Copy from LineFormater (any better idea?) - */ - protected function replaceNewlines($str) - { - return strtr($str, array("\r\n" => ' ', "\r" => ' ', "\n" => ' ')); - } } diff --git a/tests/Monolog/Handler/SlackHandlerTest.php b/tests/Monolog/Handler/SlackHandlerTest.php index 591a36f9..d657fae3 100644 --- a/tests/Monolog/Handler/SlackHandlerTest.php +++ b/tests/Monolog/Handler/SlackHandlerTest.php @@ -104,9 +104,9 @@ class SlackHandlerTest extends TestCase ); } - private function createHandler($token = 'myToken', $channel = 'channel1', $username = 'Monolog', $useAttachment = true, $iconEmoji = null) + private function createHandler($token = 'myToken', $channel = 'channel1', $username = 'Monolog', $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeExtra = false) { - $constructorArgs = array($token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true); + $constructorArgs = array($token, $channel, $username, $useAttachment, $iconEmoji, Logger::DEBUG, true, $useShortAttachment, $includeExtra); $this->res = fopen('php://memory', 'a'); $this->handler = $this->getMock( '\Monolog\Handler\SlackHandler',