исключение — log4php + PHP 7 — перехват и регистрация Throwable

У меня возникают проблемы при регистрации «TypeError» с log4php. Я подозреваю, что это потому, что я недавно обновился с php 5.5 до 7.1.

Обычно мой синтаксис выглядит так:

<?

use Logger;

class MyClass
{
/** @var Logger */
private $logger;

function __construct(array $configParams)
{
Logger::configure('logger.xml');
$this->logger = Logger::getLogger(__CLASS__);
}

public function dostuff()
{
try
{
// ...
}
catch (Exception $ex)
{
$this->logger->error("ERROR CAUGHT", $ex);
}
}
}

?>

Приведенный выше синтаксис выведет много информации в файл журнала, включая трассировку стека. Однако после прочтения последней документации по php7, я считаю, что должен обрабатывать интерфейс \ Throwable, чтобы отлавливать как ошибки, так и исключения (что здорово). Поэтому я заменяю вышеупомянутый улов следующим:

catch (\Throwable $ex)

Это все еще печатает информацию трассировки стека для моих исключений, но когда перехватывается «TypeError», ничего не печатается в файл журнала.

Я предполагаю, что это связано с тем, что log4php не знает, как регистрировать ошибки. Как я могу регистрировать ошибки, используя log4php универсальным способом?

Спасибо,

1

Решение

Я думаю, что вы должны использовать $ex->getMessage() для метода error () ваш код должен быть

 catch (Exception $ex)
{
$this->logger->error("ERROR CAUGHT", $ex->getMessage());
}

Для регистрации трассировки вы должны использовать трассировку

 catch (Exception $ex)
{
$this->logger->trace("ERROR CAUGHT", $ex);
}
1

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

Попробуй это исправить

$this->logger->error("ERROR CAUGHT", $ex);

с

$this->logger->error("ERROR CAUGHT : " . $ex->getMessage());

log4phpДокументация говорит, что метод ошибки имеет только один параметр.

0

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