Получить Монолог, чтобы войти в массив
У нас есть старая прикладная часть, которая еще не использует Monolog. Это приложение требует единовременного вывода всей информации из журнала, чтобы оно могло распечатать его в скрытом элементе, видимом только для разработчиков.
Очень похоже на отладку в реальном времени... Проблема в том, что я не могу понять, как заставить Monolog войти в массив или установить обработчик для локальной переменной, или получить вывод из журнала в перкулярной части кода... Это это то, что я придумал до сих пор:
protected function getHandlers()
{
$handlers = array();
$logsDir = $this->getLogsDir();
$logFile = $logsDir . DIRECTORY_SEPARATOR . 'application.log';
$logfileHandler = new \Monolog\Handler\FingersCrossedHandler($logFile, Logger::ERROR);
array_push($handlers, $logfileHandler);
// When in CLI, we're going to push the logs through STDERR as well
// This way, if needed, we can easily redirect STDERR to STDOUT or to some specified file
if (php_sapi_name() == 'cli') {
$stderrHandler = new StreamHandler('php://stderr', Logger::INFO);
array_push($handlers, $stderrHandler);
}
return $handlers;
}
Любая идея, какой обработчик подходит для этого? (примеры приветствуются)
1 ответ
Хорошо для тех, у кого тот же логический столбец. Я сделал это с помощью пользовательского обработчика:
<?php
namespace Log\Handler;
use Monolog\Logger;
use Monolog\Handler\AbstractProcessingHandler;
/**
* Description of runtimeHandler
*
* @author Sinisa Culic <sinisaculic@gmail.com>
*/
class RuntimeHandler extends AbstractProcessingHandler
{
protected $log;
/**
* @param integer $level The minimum logging level at which this handler will be triggered
* @param Boolean $bubble Whether the messages that are handled can bubble up the stack or not
*/
public function __construct($level = Logger::DEBUG, $bubble = true)
{
parent::__construct($level, $bubble);
}
/**
* {@inheritdoc}
*/
public function close()
{
return $this->log;
}
/**
* {@inheritdoc}
*/
protected function write(array $record)
{
$this->log[] = $record;
}
}