2017-06-05 69 views
1

我无法用log4php记录“TypeError”。我怀疑这是因为我最近从php 5.5升级到7.1。log4php + PHP 7 - 捕获和日志记录可丢失

通常情况下,我的语法如下:

<? 

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) 

这仍然打印堆栈跟踪信息为我的异常,但是当一个“类型错误”被捉住,没有被打印到日志文件。

我认为这是由于log4php不知道如何记录错误。如何以通用的方式使用log4php记录错误?

感谢,

回答

1

我认为你应该使用$ex->getMessage()错误()方法,你的代码应该是

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

对于测井曲线,你应该使用跟踪

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

但是没有堆栈跟踪:( – mils

+0

@mils我被编辑回答记录跟踪 –

0

尝试解决此

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

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

log4php的文件说,错误的方法只有一个参数。

+0

它是一个可选参数,请参阅(https://logging.apache.org/log4php/apidocs/class-Logger.html# _错误) – mils