У меня возникают проблемы при регистрации «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 универсальным способом?
Спасибо,
Я думаю, что вы должны использовать $ex->getMessage()
для метода error () ваш код должен быть
catch (Exception $ex)
{
$this->logger->error("ERROR CAUGHT", $ex->getMessage());
}
Для регистрации трассировки вы должны использовать трассировку
catch (Exception $ex)
{
$this->logger->trace("ERROR CAUGHT", $ex);
}
Попробуй это исправить
$this->logger->error("ERROR CAUGHT", $ex);
с
$this->logger->error("ERROR CAUGHT : " . $ex->getMessage());
log4phpДокументация говорит, что метод ошибки имеет только один параметр.