-
Notifications
You must be signed in to change notification settings - Fork 3
/
FilteredLogLevelDecorator.php
59 lines (47 loc) · 1.51 KB
/
FilteredLogLevelDecorator.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
declare(strict_types=1);
namespace Scoutapm\Logger;
use Psr\Log\LoggerInterface;
use Psr\Log\LoggerTrait;
use Psr\Log\LogLevel;
use Webmozart\Assert\Assert;
use function strtolower;
/**
* This log decorator is used to squelch log messages below a configured threshold.
*/
final class FilteredLogLevelDecorator implements LoggerInterface
{
use LoggerTrait;
private const PREPEND_SCOUT_TAG = '[Scout] ';
private const LOG_LEVEL_ORDER = [
LogLevel::DEBUG => 0,
LogLevel::INFO => 1,
LogLevel::NOTICE => 2,
LogLevel::WARNING => 3,
LogLevel::ERROR => 4,
LogLevel::CRITICAL => 5,
LogLevel::ALERT => 6,
LogLevel::EMERGENCY => 7,
];
/** @var LoggerInterface */
private $realLogger;
/** @var int */
private $minimumLogLevel;
/**
* @param string $minimumLogLevel e.g. `emergency`, `error`, etc. - {@see \Psr\Log\LogLevel}
*/
public function __construct(LoggerInterface $realLogger, string $minimumLogLevel)
{
Assert::keyExists(self::LOG_LEVEL_ORDER, strtolower($minimumLogLevel));
$this->minimumLogLevel = self::LOG_LEVEL_ORDER[strtolower($minimumLogLevel)];
$this->realLogger = $realLogger;
}
/** {@inheritDoc} */
public function log($level, $message, array $context = [])
{
if ($this->minimumLogLevel > self::LOG_LEVEL_ORDER[$level]) {
return;
}
$this->realLogger->log($level, self::PREPEND_SCOUT_TAG . $message, $context);
}
}