Получить Монолог, чтобы войти в массив

У нас есть старая прикладная часть, которая еще не использует 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;
    }

}
Другие вопросы по тегам