Completed
Push — master ( d16a14...e21519 )
by Robbie
27s
created

DataObjectHandler::getMinimumLogLevel()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace SilverLeague\LogViewer\Handler;
4
5
use Monolog\Logger;
6
use Monolog\Formatter\LineFormatter;
7
use Monolog\Handler\AbstractProcessingHandler;
8
use SilverStripe\Core\Config\Config;
9
10
/**
11
 * The DataObjectHandler allows you to use a SilverStripe DataObject for handling Monolog log entries.
12
 *
13
 * The default class to use is "LogEntry" which will store the log message, level and date/time in the database.
14
 *
15
 * @package silverstripe-logviewer
16
 * @author  Robbie Averill <[email protected]>
17
 */
18
class DataObjectHandler extends AbstractProcessingHandler
19
{
20
    /**
21
     * The default DataObject to use for storing log entries
22
     *
23
     * @var string
24
     */
25
    const DEFAULT_CLASS = 'SilverLeague\\LogViewer\\Model\\LogEntry';
26
27
    /**
28
     * The default DateTime format to use for storing the log timestamp
29
     *
30
     * @var string
31
     */
32
    const DEFAULT_DATETIME_FORMAT = 'Y-m-d H:i:s';
33
34
    /**
35
     * DataObject class for storing log entries
36
     *
37
     * @var string
38
     */
39
    protected $objectClass;
40
41
    /**
42
     * @param string  $objectClass The DataObject class to use for handling the write
43
     * @param int     $level       The minimum logging level at which this handler will be triggered (configurable)
44
     * @param boolean $bubble      Whether the messages that are handled can bubble up the stack or not
45
     */
46
    public function __construct($objectClass = self::DEFAULT_CLASS, $level = Logger::DEBUG, $bubble = true)
47
    {
48
        $this->setObjectClass($objectClass);
49
        $level = $this->getMinimumLogLevel();
50
        parent::__construct($level, $bubble);
51
    }
52
53
    /**
54
     * {@inheritDoc}
55
     */
56
    protected function getDefaultFormatter()
57
    {
58
        return new LineFormatter('%message% %context% %extra%');
59
    }
60
61
    /**
62
     * {@inheritdoc}
63
     */
64
    protected function write(array $record)
65
    {
66
        $this->addDataObject((string) $record['formatted'], $record['level_name']);
67
    }
68
69
    /**
70
     * Create a new DataObject instance and set the log information to it
71
     *
72
     * @param  string $message The log message
73
     * @param  string $level   The log level text, e.g. "DEBUG"
74
     * @return int             The written DataObject ID
75
     */
76
    public function addDataObject($message, $level)
77
    {
78
        $class = $this->getObjectClass();
79
80
        $object = $class::create();
81
        $object->setField('Entry', $message);
82
        $object->setField('Level', $level);
83
        $object->write();
84
85
        return $object->ID;
86
    }
87
88
    /**
89
     * Set the DataObject to use for storing log entries
90
     *
91
     * @param  string $class
92
     * @return $this
93
     */
94
    public function setObjectClass($class)
95
    {
96
        $this->objectClass = $class;
97
        return $this;
98
    }
99
100
    /**
101
     * Get the DataObject to use for storing log entries
102
     *
103
     * @return string
104
     */
105
    public function getObjectClass()
106
    {
107
        return $this->objectClass;
108
    }
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
    }
120
}
121