2011-08-18 23 views
8

私は、LoggerAppenderRollingFileアペンダーとLoggerLayoutTTCCレイアウトを使用してファイルにログするようにlog4phpを設定しました。しかし、私が例外を記録すると、log4netで見たようなスタックトレースなどの例外の詳細は表示されません。log4phpでログファイルに例外情報を出力する方法は?

私はコードをすばやく見てきましたが、LoggerAppenderMongoDBformatThrowable methodで例外を表示するようにサポートされていますが、他のアペンダーでは何も表示されません。

私は何かが明らかに欠けているように感じます。これらの詳細をログファイルに出力するために設定する必要があるものはありますか?カスタムLoggerAppenderクラスを作成する必要はありますか?あるいは、これは別のレイアウトやカスタムレンダラで行うことができますか?

答えて

1

PHPのset_exception_handler関数を使用し、この関数を使用してlog4phpをラップする必要があります。 はでそれをチェックアウト:http://php.net/manual/en/function.set-exception-handler.php

function exception_handler($exception) { 

$対数>デバッグ($ exception->のgetMessage()); }

set_exception_handler( 'exception_handler');

1

私は同じ結論に達しました:log4phpはLoggerAppenderMongoDB.phpアペンダーの$throwableパラメーターで何かを行うようです。

LoggerAppenderFileベースクラスは、メッセージをフォーマットするために(LoggerLayoutTTCC)、レイアウトに依存しています(予想通り)。そのクラスにはignoresThrowable()というメソッドがあり、trueを返します。このメソッドは呼び出されたようには見えませんが、作成者がエラーを記録するつもりはないと軽度に伝えます。

私は今LoggerLayoutTTCCが廃止されていることを、あなたは例外を含めるために、より良いフォーマット文字列でLoggerLayoutPatternを使用することができ、)

FYI
class LoggerLayoutTTCCWithException extends LoggerLayoutTTCC 
    { 
     public function format(LoggerLoggingEvent $event) { 
      $format = parent::format($event); 

      $throwableInfo = $event->getThrowableInformation(); 
      if ($throwableInfo === null) { 
       return $format; 
      } 

      $renderer = new LoggerRendererException(); 
      return $format . $renderer->render($throwableInfo->getThrowable()); 
     } 
    } 
2

をLoggerLayoutTTCCを拡張し、(形式を上書きし、私独自のレイアウトクラスを追加しました。

<layout class="LoggerLayoutPattern"> 
    <param name="conversionPattern" value="%d{m/d/y H:i:s,u} [%t] %p %c %x - %m %newline%throwable" /> 
</layout> 

<!-- %newline%throwable is the important part --> 

ドキュメントのロギング例外セクションを参照してください:http://logging.apache.org/log4php/docs/layouts/pattern.html#Logging_exceptions

関連する問題