Сохранить результат Whoops PrettyPageHandler

Я использую библиотеку ошибок Whoops (и мне это нравится) в dev, чтобы показать PrettyPageHandler следующим образом:

if (ENVIRONMENT == 'local') {
    $whoops = new \Whoops\Run;
    $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
    $whoops->register();
}

В прямом эфире я использую CallbackHandler, чтобы показать конечному пользователю "дружественное пользователю" сообщение об ошибке.

Есть ли способ сохранить результат / вывод PrettyPageHandler в базу данных или даже в файловую систему? Я думаю показать конечному пользователю дружественную страницу с ошибкой, но одновременно записать ошибку, используя PrettyPageHandler, чтобы оглянуться назад и отладить ошибку, которую получил пользователь.

2 ответа

Как описано в документации:

$run->pushHandler(function($exception, $inspector, $run) {
    var_dump($exception->getMessage());
    return Handler::DONE;
});

замещать var_dump($exception->getMessage()); с вашим собственным кодом для сохранения в базу данных или файл журнала.

https://github.com/filp/whoops/blob/master/docs/API%20Documentation.md#core-handlers-1

Edit1:

Чтобы использовать PrettyPageHandler для сохранения журнала, создайте пользовательский обработчик, расширяющийся от PrettyPageHandler, и в том месте, где дескриптор возвращает форматированный ответ, прежде чем возвращать ответ пользователю, сохраните его в базе данных или файловой системе в нужном формате.

Вы можете сделать что-то вроде этого:

<?php

class PrettyErrorLogger extends \Whoops\Handler\PrettyPageHandler
{
    public function handle()
    {
        parent::handle();
        $output = ob_get_clean();

        file_put_contents('error.log', $output); // or replace with DB insert
    }
}

затем использовать его как обработчик

$whoops->pushHandler(new PrettyErrorLogger);

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