我无法记录" 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:
catch (\Throwable $ex)
这仍会打印异常的堆栈跟踪信息,但是当出现&#34; TypeError&#34;被捕获,没有任何内容打印到日志文件。
我认为这是由于log4php不知道如何记录错误。如何以通用方式使用log4php记录错误?
谢谢,
答案 0 :(得分:1)
我认为你应该使用$ex->getMessage()
代码应该是
catch (Exception $ex)
{
$this->logger->error("ERROR CAUGHT", $ex->getMessage());
}
对于记录跟踪,您应该使用跟踪
catch (Exception $ex)
{
$this->logger->trace("ERROR CAUGHT", $ex);
}
答案 1 :(得分:0)
尝试解决此问题
$this->logger->error("ERROR CAUGHT", $ex);
带
$this->logger->error("ERROR CAUGHT : " . $ex->getMessage());
log4php的文档说错误方法只有一个参数。
答案 2 :(得分:0)
花了我一段时间才能弄清楚为什么在引发异常时log4php未记录原始文件名和行号。事实证明,我的自定义exception_handler类仅记录异常消息(通过执行$exception->getMessage()
),该异常消息不包含文件名也不包含行号。我要做的就是将以下信息连接起来:$exception->getFile()
和$exception->getLine()
:
public function exception_handler ($exception) {
$logger = Logger9::create();
$logger->info($exception->getMessage()." ".$exception->getFile()." ".$exception->getLine());
}
别忘了注册自定义处理程序:
@set_exception_handler(array($this, 'exception_handler'));