Skip to content

Commit e215199

Browse files
Merge pull request #7 from silverleague/feature/configure-minimum-log-level
API Add configurable minimum log capture level - default 300 (warning)
2 parents d16a142 + 9c67344 commit e215199

File tree

5 files changed

+69
-6
lines changed

5 files changed

+69
-6
lines changed

.scrutinizer.yml

+12-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,17 @@
1+
inherit: true
2+
13
filter:
24
paths: [src/*, tests/*]
35

46
checks:
5-
php: true
7+
php:
8+
code_rating: true
9+
duplication: true
610

11+
build:
12+
dependencies:
13+
override:
14+
- true
15+
tests:
16+
override:
17+
- phpcs-run

_config/config.yml

+2
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@ LogViewer:
1818
cron_schedule: 0 4 * * *
1919
# The maximum age in days for a LogEntry before it will be removed
2020
max_log_age: 30
21+
# Which Monolog\Logger levels (numberic) to start handling from (see class for examples)
22+
minimum_log_level: 300 # WARNING

phpcs.xml.dist

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0"?>
2+
<ruleset>
3+
<file>./src</file>
4+
<file>./tests</file>
5+
<rule ref="PSR2" />
6+
</ruleset>

src/Handler/DataObjectHandler.php

+14-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Monolog\Logger;
66
use Monolog\Formatter\LineFormatter;
77
use Monolog\Handler\AbstractProcessingHandler;
8+
use SilverStripe\Core\Config\Config;
89

910
/**
1011
* The DataObjectHandler allows you to use a SilverStripe DataObject for handling Monolog log entries.
@@ -39,12 +40,13 @@ class DataObjectHandler extends AbstractProcessingHandler
3940

4041
/**
4142
* @param string $objectClass The DataObject class to use for handling the write
42-
* @param int $level The minimum logging level at which this handler will be triggered
43+
* @param int $level The minimum logging level at which this handler will be triggered (configurable)
4344
* @param boolean $bubble Whether the messages that are handled can bubble up the stack or not
4445
*/
4546
public function __construct($objectClass = self::DEFAULT_CLASS, $level = Logger::DEBUG, $bubble = true)
4647
{
4748
$this->setObjectClass($objectClass);
49+
$level = $this->getMinimumLogLevel();
4850
parent::__construct($level, $bubble);
4951
}
5052

@@ -104,4 +106,15 @@ public function getObjectClass()
104106
{
105107
return $this->objectClass;
106108
}
109+
110+
/**
111+
* Get the minimum Monolog\Logger log level to start catching messages at
112+
*
113+
* @see \Monolog\Logger
114+
* @return int
115+
*/
116+
public function getMinimumLogLevel()
117+
{
118+
return (int) Config::inst()->get('LogViewer', 'minimum_log_level');
119+
}
107120
}

tests/Handler/DataObjectHandlerTest.php

+35-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use SilverLeague\LogViewer\Handler\DataObjectHandler;
66
use SilverLeague\LogViewer\Model\LogEntry;
77
use SilverStripe\Dev\SapphireTest;
8+
use SilverStripe\Core\Config\Config;
89
use SilverStripe\Core\Injector\Injector;
910

1011
/**
@@ -39,6 +40,8 @@ public function setUp()
3940
{
4041
parent::setUp();
4142

43+
Config::nest();
44+
4245
$this->logger = Injector::inst()->get('Logger');
4346

4447
// Clear the default handlers so we can test precisely
@@ -48,17 +51,43 @@ public function setUp()
4851

4952
/**
5053
* Test that arbitary log levels are all written to the database through the DataObjectHandler
51-
*
52-
* @covers \SilverLeague\LogViewer\Handler\DataObjectHandler
5354
*/
5455
public function testWriteToDefaultLogger()
5556
{
5657
$this->logger->pushHandler(new DataObjectHandler);
57-
$this->logger->addDebug('Hello world');
58+
$this->logger->addError('Hello world');
5859

5960
$logEntry = LogEntry::get()->first();
6061
$this->assertContains('Hello world', $logEntry->Entry);
61-
$this->assertSame('DEBUG', $logEntry->Level);
62+
$this->assertSame('ERROR', $logEntry->Level);
63+
}
64+
65+
/**
66+
* Test that logs are handled at a minimum level, but not lower than it.
67+
*/
68+
public function testDontLogMessagesLowerThanMinimumLever()
69+
{
70+
Config::inst()->update('LogViewer', 'minimum_log_level', 300);
71+
LogEntry::get()->removeAll();
72+
$this->logger->pushHandler(new DataObjectHandler);
73+
74+
$this->logger->addDebug('Debug');
75+
$this->assertSame(0, LogEntry::get()->count());
76+
77+
$this->logger->addWarning('Warning');
78+
$this->assertGreaterThan(0, LogEntry::get()->filter('Level', 'WARNING')->count());
79+
80+
$this->logger->addAlert('Alert');
81+
$this->assertGreaterThan(0, LogEntry::get()->filter('Level', 'ALERT')->count());
82+
}
83+
84+
/**
85+
* Test that the minumum log capture level is returned from configuration
86+
*/
87+
public function testGetMinimumLogLevelFromConfiguration()
88+
{
89+
Config::inst()->update('LogViewer', 'minimum_log_level', 123);
90+
$this->assertSame(123, (new DataObjectHandler)->getMinimumLogLevel());
6291
}
6392

6493
/**
@@ -68,6 +97,8 @@ public function testWriteToDefaultLogger()
6897
*/
6998
public function tearDown()
7099
{
100+
Config::unnest();
101+
71102
$this->logger->setHandlers($this->originalHandlers);
72103

73104
parent::tearDown();

0 commit comments

Comments
 (0)