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

Merge remote-tracking branch 'netmikey/master'

Jordi Boggiano 12 лет назад
Родитель
Сommit
e9df30c7f5

+ 44 - 0
src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php

@@ -0,0 +1,44 @@
+<?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\Handler\FingersCrossed;
+
+/**
+ * Channel and Error level based monolog activation strategy. Allows to trigger activation
+ * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except
+ * for records of the 'sql' channel; those should trigger activation on level 'WARN'.
+ *
+ * @author Mike Meessen <netmikey@gmail.com>
+ */
+class ChannelLevelActivationStrategy implements ActivationStrategyInterface
+{
+    private $defaultActionLevel;
+    private $channelToActionLevel;
+
+    /**
+     * @param int $defaultActionLevel The default action level to be used if the record's category doesn't match any
+     * @param array $categoryToActionLevel An array that maps channel names to action levels.
+     */
+    public function __construct($defaultActionLevel, $channelToActionLevel = array())
+    {
+        $this->defaultActionLevel = $defaultActionLevel;
+        $this->channelToActionLevel = $channelToActionLevel;
+    }
+
+    public function isHandlerActivated(array $record)
+    {
+        if (isset($this->channelToActionLevel[$record['channel']])) {
+            return $record['level'] >= $this->channelToActionLevel[$record['channel']];
+        } else {
+            return $record['level'] >= $this->defaultActionLevel;
+        }
+    }
+}

+ 17 - 0
tests/Monolog/Handler/FingersCrossedHandlerTest.php

@@ -14,6 +14,7 @@ namespace Monolog\Handler;
 use Monolog\TestCase;
 use Monolog\Logger;
 use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy;
+use Monolog\Handler\FingersCrossed\ChannelLevelActivationStrategy;
 
 class FingersCrossedHandlerTest extends TestCase
 {
@@ -149,6 +150,22 @@ class FingersCrossedHandlerTest extends TestCase
         $this->assertTrue($test->hasWarningRecords());
     }
 
+    /**
+     * @covers Monolog\Handler\FingersCrossedHandler::__construct
+     */
+    public function testCategoryErrorLevelActivationStrategy()
+    {
+        $test = new TestHandler();
+        $handler = new FingersCrossedHandler($test, new ChannelLevelActivationStrategy(Logger::ERROR, array('othertest' => Logger::DEBUG)));
+        $handler->handle($this->getRecord(Logger::WARNING));
+        $this->assertFalse($test->hasWarningRecords());
+        $record = $this->getRecord(Logger::DEBUG);
+        $record['channel'] = 'othertest';
+        $handler->handle($record);
+        $this->assertTrue($test->hasDebugRecords());
+        $this->assertTrue($test->hasWarningRecords());
+    }
+
     /**
      * @covers Monolog\Handler\FingersCrossedHandler::handle
      */