mirror of
https://github.com/maximebf/php-debugbar.git
synced 2025-07-09 19:06:31 +02:00
added possibility to name monolog and messages collectors as well as aggregate them into a messages collector
This commit is contained in:
@ -14,6 +14,7 @@ use Monolog\Logger;
|
|||||||
use Monolog\Handler\AbstractProcessingHandler;
|
use Monolog\Handler\AbstractProcessingHandler;
|
||||||
use DebugBar\DataCollector\DataCollectorInterface;
|
use DebugBar\DataCollector\DataCollectorInterface;
|
||||||
use DebugBar\DataCollector\Renderable;
|
use DebugBar\DataCollector\Renderable;
|
||||||
|
use DebugBar\DataCollector\MessagesAggregateInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A monolog handler as well as a data collector
|
* A monolog handler as well as a data collector
|
||||||
@ -22,21 +23,40 @@ use DebugBar\DataCollector\Renderable;
|
|||||||
* $debugbar->addCollector(new MonologCollector($logger));
|
* $debugbar->addCollector(new MonologCollector($logger));
|
||||||
* </code>
|
* </code>
|
||||||
*/
|
*/
|
||||||
class MonologCollector extends AbstractProcessingHandler implements DataCollectorInterface, Renderable
|
class MonologCollector extends AbstractProcessingHandler implements DataCollectorInterface, Renderable, MessagesAggregateInterface
|
||||||
{
|
{
|
||||||
|
protected $name;
|
||||||
|
|
||||||
protected $records = array();
|
protected $records = array();
|
||||||
|
|
||||||
public function __construct(Logger $logger, $level = Logger::DEBUG, $bubble = true)
|
/**
|
||||||
|
* @param Logger $logger
|
||||||
|
* @param int $level
|
||||||
|
* @param boolean $bubble
|
||||||
|
* @param string $name
|
||||||
|
*/
|
||||||
|
public function __construct(Logger $logger = null, $level = Logger::DEBUG, $bubble = true, $name = 'monolog')
|
||||||
{
|
{
|
||||||
parent::__construct($level, $bubble);
|
parent::__construct($level, $bubble);
|
||||||
$logger->pushHandler($this);
|
$this->name = $name;
|
||||||
|
if ($logger !== null) {
|
||||||
|
$this->addLogger($logger);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds logger which messages you want to log
|
||||||
|
*
|
||||||
|
* @param Logger $logger
|
||||||
|
*/
|
||||||
public function addLogger(Logger $logger)
|
public function addLogger(Logger $logger)
|
||||||
{
|
{
|
||||||
$logger->pushHandler($this);
|
$logger->pushHandler($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
protected function write(array $record)
|
protected function write(array $record)
|
||||||
{
|
{
|
||||||
$this->records[] = array(
|
$this->records[] = array(
|
||||||
@ -47,6 +67,14 @@ class MonologCollector extends AbstractProcessingHandler implements DataCollecto
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function getMessages()
|
||||||
|
{
|
||||||
|
return $this->records;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
@ -63,7 +91,7 @@ class MonologCollector extends AbstractProcessingHandler implements DataCollecto
|
|||||||
*/
|
*/
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
return 'monolog';
|
return $this->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,14 +99,15 @@ class MonologCollector extends AbstractProcessingHandler implements DataCollecto
|
|||||||
*/
|
*/
|
||||||
public function getWidgets()
|
public function getWidgets()
|
||||||
{
|
{
|
||||||
|
$name = $this->getName();
|
||||||
return array(
|
return array(
|
||||||
"logs" => array(
|
$name => array(
|
||||||
"widget" => "PhpDebugBar.Widgets.MessagesWidget",
|
"widget" => "PhpDebugBar.Widgets.MessagesWidget",
|
||||||
"map" => "monolog.records",
|
"map" => "$name.records",
|
||||||
"default" => "[]"
|
"default" => "[]"
|
||||||
),
|
),
|
||||||
"logs:badge" => array(
|
"$name:badge" => array(
|
||||||
"map" => "monolog.count",
|
"map" => "$name.count",
|
||||||
"default" => "null"
|
"default" => "null"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
21
src/DebugBar/DataCollector/MessagesAggregateInterface.php
Normal file
21
src/DebugBar/DataCollector/MessagesAggregateInterface.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of the DebugBar package.
|
||||||
|
*
|
||||||
|
* (c) 2013 Maxime Bouroumeau-Fuseau
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace DebugBar\DataCollector;
|
||||||
|
|
||||||
|
interface MessagesAggregateInterface
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Returns collected messages
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMessages();
|
||||||
|
}
|
@ -15,16 +15,20 @@ use Psr\Log\AbstractLogger;
|
|||||||
/**
|
/**
|
||||||
* Provides a way to log messages
|
* Provides a way to log messages
|
||||||
*/
|
*/
|
||||||
class MessagesCollector extends AbstractLogger implements DataCollectorInterface, Renderable
|
class MessagesCollector extends AbstractLogger implements DataCollectorInterface, MessagesAggregateInterface, Renderable
|
||||||
{
|
{
|
||||||
|
protected $name;
|
||||||
|
|
||||||
protected $messages = array();
|
protected $messages = array();
|
||||||
|
|
||||||
|
protected $aggregates = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* @param string $name
|
||||||
*/
|
*/
|
||||||
public function log($level, $message, array $context = array())
|
public function __construct($name = 'messages')
|
||||||
{
|
{
|
||||||
$this->addMessage($message, $level);
|
$this->name = $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,19 +45,51 @@ class MessagesCollector extends AbstractLogger implements DataCollectorInterface
|
|||||||
'message' => print_r($message, true),
|
'message' => print_r($message, true),
|
||||||
'is_string' => is_string($message),
|
'is_string' => is_string($message),
|
||||||
'label' => $label,
|
'label' => $label,
|
||||||
'time' => microtime(true),
|
'time' => microtime(true)
|
||||||
'memory_usage' => memory_get_usage()
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all messages
|
* Aggregates messages from other collectors
|
||||||
*
|
*
|
||||||
* @return array
|
* @param MessagesAggregateInterface $messages
|
||||||
|
*/
|
||||||
|
public function aggregate(MessagesAggregateInterface $messages)
|
||||||
|
{
|
||||||
|
$this->aggregates[] = $messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function getMessages()
|
public function getMessages()
|
||||||
{
|
{
|
||||||
return $this->messages;
|
$messages = $this->messages;
|
||||||
|
foreach ($this->aggregates as $collector) {
|
||||||
|
$msgs = array_map(function($m) use ($collector) {
|
||||||
|
$m['collector'] = $collector->getName();
|
||||||
|
return $m;
|
||||||
|
}, $collector->getMessages());
|
||||||
|
$messages = array_merge($messages, $msgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
// sort messages by their timestamp
|
||||||
|
usort($messages, function($a, $b) {
|
||||||
|
if ($a['time'] === $b['time']) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return $a['time'] < $b['time'] ? -1 : 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
return $messages;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function log($level, $message, array $context = array())
|
||||||
|
{
|
||||||
|
$this->addMessage($message, $level);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,9 +97,10 @@ class MessagesCollector extends AbstractLogger implements DataCollectorInterface
|
|||||||
*/
|
*/
|
||||||
public function collect()
|
public function collect()
|
||||||
{
|
{
|
||||||
|
$messages = $this->getMessages();
|
||||||
return array(
|
return array(
|
||||||
'count' => count($this->messages),
|
'count' => count($messages),
|
||||||
'messages' => $this->messages
|
'messages' => $messages
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +109,7 @@ class MessagesCollector extends AbstractLogger implements DataCollectorInterface
|
|||||||
*/
|
*/
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
return 'messages';
|
return $this->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,14 +117,15 @@ class MessagesCollector extends AbstractLogger implements DataCollectorInterface
|
|||||||
*/
|
*/
|
||||||
public function getWidgets()
|
public function getWidgets()
|
||||||
{
|
{
|
||||||
|
$name = $this->getName();
|
||||||
return array(
|
return array(
|
||||||
"messages" => array(
|
"$name" => array(
|
||||||
"widget" => "PhpDebugBar.Widgets.MessagesWidget",
|
"widget" => "PhpDebugBar.Widgets.MessagesWidget",
|
||||||
"map" => "messages.messages",
|
"map" => "$name.messages",
|
||||||
"default" => "[]"
|
"default" => "[]"
|
||||||
),
|
),
|
||||||
"messages:badge" => array(
|
"$name:badge" => array(
|
||||||
"map" => "messages.count",
|
"map" => "$name.count",
|
||||||
"default" => "null"
|
"default" => "null"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -174,7 +174,7 @@ div.phpdebugbar-widgets-messages {
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
color: red;
|
color: red;
|
||||||
}
|
}
|
||||||
div.phpdebugbar-widgets-messages li.list-item a.backtrace,
|
div.phpdebugbar-widgets-messages li.list-item span.collector,
|
||||||
div.phpdebugbar-widgets-messages li.list-item span.label {
|
div.phpdebugbar-widgets-messages li.list-item span.label {
|
||||||
float: right;
|
float: right;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
@ -183,6 +183,10 @@ div.phpdebugbar-widgets-messages {
|
|||||||
margin: 0 2px;
|
margin: 0 2px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
div.phpdebugbar-widgets-messages li.list-item span.collector {
|
||||||
|
color: #555;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
div.phpdebugbar-widgets-messages div.toolbar {
|
div.phpdebugbar-widgets-messages div.toolbar {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
@ -231,6 +231,9 @@ if (typeof(PhpDebugBar) == 'undefined') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$('<span class="label" />').text(value.label).appendTo(li);
|
$('<span class="label" />').text(value.label).appendTo(li);
|
||||||
|
if (value.collector) {
|
||||||
|
$('<span class="collector" />').text(value.collector).appendTo(li);
|
||||||
|
}
|
||||||
}});
|
}});
|
||||||
|
|
||||||
this.$list.$el.appendTo(this.$el);
|
this.$list.$el.appendTo(this.$el);
|
||||||
|
Reference in New Issue
Block a user