Просмотр исходного кода

Add ->withName to clone a handler and get a new name, fixes #730

Jordi Boggiano 10 лет назад
Родитель
Сommit
cb2778ae77
3 измененных файлов с 29 добавлено и 0 удалено
  1. 3 0
      doc/01-usage.md
  2. 13 0
      src/Monolog/Logger.php
  3. 13 0
      tests/Monolog/LoggerTest.php

+ 3 - 0
doc/01-usage.md

@@ -189,6 +189,9 @@ $logger->pushHandler($firephp);
 $securityLogger = new Logger('security');
 $securityLogger->pushHandler($stream);
 $securityLogger->pushHandler($firephp);
+
+// Or clone the first one to only change the channel
+$securityLogger = $logger->withName('security');
 ```
 
 ## Customizing the log format

+ 13 - 0
src/Monolog/Logger.php

@@ -153,6 +153,19 @@ class Logger implements LoggerInterface
         return $this->name;
     }
 
+    /**
+     * Return a new cloned instance with the name changed
+     *
+     * @return static
+     */
+    public function withName($name)
+    {
+        $new = clone $this;
+        $new->name = $name;
+
+        return $new;
+    }
+
     /**
      * Pushes a handler on to the stack.
      *

+ 13 - 0
tests/Monolog/LoggerTest.php

@@ -33,6 +33,19 @@ class LoggerTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals('ERROR', Logger::getLevelName(Logger::ERROR));
     }
 
+    /**
+     * @covers Monolog\Logger::withName
+     */
+    public function testWithName()
+    {
+        $first = new Logger('first', array($handler = new TestHandler()));
+        $second = $first->withName('second');
+
+        $this->assertSame('first', $first->getName());
+        $this->assertSame('second', $second->getName());
+        $this->assertSame($handler, $second->popHandler());
+    }
+
     /**
      * @covers Monolog\Logger::toMonologLevel
      */