Selaa lähdekoodia

Support objects/arrays/resources a bit better, refs #410

Jordi Boggiano 11 vuotta sitten
vanhempi
commit
b3f039339d

+ 5 - 3
src/Monolog/Processor/PsrLogMessageProcessor.php

@@ -32,10 +32,12 @@ class PsrLogMessageProcessor
 
         $replacements = array();
         foreach ($record['context'] as $key => $val) {
-            if (is_null($val) || 
-                is_scalar($val) || 
-               (is_object($val) && method_exists($val, "__toString"))) {
+            if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) {
                 $replacements['{'.$key.'}'] = $val;
+            } elseif (is_object($val)) {
+                $replacements['{'.$key.'}'] = '[object '.get_class($val).']';
+            } else {
+                $replacements['{'.$key.'}'] = '['.gettype($val).']';
             }
         }
 

+ 45 - 0
tests/Monolog/Processor/PsrLogMessageProcessorTest.php

@@ -0,0 +1,45 @@
+<?php
+
+/*
+ * This file is part of the Monolog package.
+ *
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Monolog\Processor;
+
+use Monolog\Processor\PsrLogMessageProcessor;
+
+class PsrLogMessageProcessorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getPairs
+     */
+    public function testReplacement($val, $expected)
+    {
+        $proc = new PsrLogMessageProcessor;
+
+        $message = $proc(array(
+            'message' => '{foo}',
+            'context' => array('foo' => $val)
+        ));
+        $this->assertEquals($expected, $message['message']);
+    }
+
+    public function getPairs()
+    {
+        return array(
+            array('foo',    'foo'),
+            array('3',      '3'),
+            array(3,        '3'),
+            array(null,     ''),
+            array(true,     '1'),
+            array(false,    ''),
+            array(new \stdClass, '[object stdClass]'),
+            array(array(), '[array]'),
+        );
+    }
+}