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

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

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

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

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

9

Решение

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

$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, и в том месте, где дескриптор возвращает форматированный ответ, прежде чем вернуть ответ пользователю, сохраните его в базе данных или файловой системе в нужном формате.

5

Другие решения

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

<?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);

1

По вопросам рекламы [email protected]