Explorar o código

Added array output to LineFormatter

Jordi Boggiano %!s(int64=15) %!d(string=hai) anos
pai
achega
0bb419cb95

+ 9 - 7
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);
             }
         }

+ 17 - 5
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']);
     }
 }