2017-06-05 6 views
1

log4phpで "TypeError"のログに問題があります。私は最近、php 5.5から7.1にアップグレードしたためです。log4php + PHP 7 - キャッチとロギングThrowable

は通常、私の構文は次のようになります。

<? 

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()を使用すべきだと思う)あなたのコードは、あなたがこの問題を解決するために試してみてくださいトレース

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

しかし、スタックトレースはありません( – mils

+0

@milsトレーストレースの回答を編集しました –

0

を使用する必要があり、ロギング、トレースについて

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

あるべき方法

$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

関連する問題