From 0bb419cb959d52d4fa20c2b9681b8e0bd428d9cc Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Wed, 23 Feb 2011 10:57:27 +0100 Subject: [PATCH] Added array output to LineFormatter --- src/Monolog/Formatter/LineFormatter.php | 16 ++++++++------ tests/Monolog/Formatter/LineFormatterTest.php | 22 ++++++++++++++----- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/Monolog/Formatter/LineFormatter.php b/src/Monolog/Formatter/LineFormatter.php index 08f70f75..b9af5b4c 100644 --- a/src/Monolog/Formatter/LineFormatter.php +++ b/src/Monolog/Formatter/LineFormatter.php @@ -22,7 +22,7 @@ use Monolog\Logger; */ class LineFormatter implements FormatterInterface { - const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message%\n"; + const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %extra%\n"; const SIMPLE_DATE = "Y-m-d H:i:s"; protected $format; @@ -39,14 +39,16 @@ class LineFormatter implements FormatterInterface $vars = $message; $vars['datetime'] = $vars['datetime']->format($this->dateFormat); - if (is_array($message['message'])) { - unset($vars['message']); - $vars = array_merge($vars, $message['message']); - } - $output = $this->format; foreach ($vars as $var => $val) { - if (!is_array($val)) { + if (is_array($val)) { + $strval = array(); + foreach ($val as $subvar => $subval) { + $strval[] = $subvar.': '.$subval; + } + $replacement = $strval ? $var.'('.implode(', ', $strval).')' : ''; + $output = str_replace('%'.$var.'%', $replacement, $output); + } else { $output = str_replace('%'.$var.'%', $val, $output); } } diff --git a/tests/Monolog/Formatter/LineFormatterTest.php b/tests/Monolog/Formatter/LineFormatterTest.php index bc86302e..66a8a751 100644 --- a/tests/Monolog/Formatter/LineFormatterTest.php +++ b/tests/Monolog/Formatter/LineFormatterTest.php @@ -25,7 +25,7 @@ class LineFormatterTest extends \PHPUnit_Framework_TestCase 'datetime' => new \DateTime, 'extra' => array(), )); - $this->assertEquals('['.date('Y-m-d').'] log.WARNING: foo'."\n", $message['message']); + $this->assertEquals('['.date('Y-m-d').'] log.WARNING: foo '."\n", $message['message']); } public function testDefFormatWithArray() @@ -37,11 +37,23 @@ class LineFormatterTest extends \PHPUnit_Framework_TestCase 'datetime' => new \DateTime, 'extra' => array(), 'message' => array( - 'channel' => 'log', - 'level_name' => 'WARNING', - 'message' => 'foo', + 'foo' => 'bar', + 'baz' => 'qux', ) )); - $this->assertEquals('['.date('Y-m-d').'] log.WARNING: foo'."\n", $message['message']); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: message(foo: bar, baz: qux) '."\n", $message['message']); + } + + public function testDefFormatExtras() + { + $formatter = new LineFormatter(null, 'Y-m-d'); + $message = $formatter->format(array( + 'level_name' => 'ERROR', + 'channel' => 'meh', + 'datetime' => new \DateTime, + 'extra' => array('ip' => '127.0.0.1'), + 'message' => 'log', + )); + $this->assertEquals('['.date('Y-m-d').'] meh.ERROR: log extra(ip: 127.0.0.1)'."\n", $message['message']); } }