]> git.mxchange.org Git - friendica-addons.git/blob
383e19af962dc1008b3013a74ba6a202c6eebcd8
[friendica-addons.git] /
1 <?php declare(strict_types=1);
2
3 /*
4  * This file is part of the Monolog package.
5  *
6  * (c) Jordi Boggiano <j.boggiano@seld.be>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Monolog\Handler\FingersCrossed;
13
14 use Monolog\Level;
15 use Monolog\Logger;
16 use Psr\Log\LogLevel;
17 use Monolog\LogRecord;
18
19 /**
20  * Channel and Error level based monolog activation strategy. Allows to trigger activation
21  * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except
22  * for records of the 'sql' channel; those should trigger activation on level 'WARN'.
23  *
24  * Example:
25  *
26  * <code>
27  *   $activationStrategy = new ChannelLevelActivationStrategy(
28  *       Level::Critical,
29  *       array(
30  *           'request' => Level::Alert,
31  *           'sensitive' => Level::Error,
32  *       )
33  *   );
34  *   $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy);
35  * </code>
36  *
37  * @author Mike Meessen <netmikey@gmail.com>
38  */
39 class ChannelLevelActivationStrategy implements ActivationStrategyInterface
40 {
41     private Level $defaultActionLevel;
42
43     /**
44      * @var array<string, Level>
45      */
46     private array $channelToActionLevel;
47
48     /**
49      * @param int|string|Level|LogLevel::*                $defaultActionLevel   The default action level to be used if the record's category doesn't match any
50      * @param array<string, int|string|Level|LogLevel::*> $channelToActionLevel An array that maps channel names to action levels.
51      *
52      * @phpstan-param value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::* $defaultActionLevel
53      * @phpstan-param array<string, value-of<Level::VALUES>|value-of<Level::NAMES>|Level|LogLevel::*> $channelToActionLevel
54      */
55     public function __construct(int|string|Level $defaultActionLevel, array $channelToActionLevel = [])
56     {
57         $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel);
58         $this->channelToActionLevel = array_map(Logger::toMonologLevel(...), $channelToActionLevel);
59     }
60
61     public function isHandlerActivated(LogRecord $record): bool
62     {
63         if (isset($this->channelToActionLevel[$record->channel])) {
64             return $record->level->value >= $this->channelToActionLevel[$record->channel]->value;
65         }
66
67         return $record->level->value >= $this->defaultActionLevel->value;
68     }
69 }