2017-06-05 75 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