8

LoggerAppenderRollingFile アペンダーLoggerLayoutTTCCレイアウトを使用してファイルにログを記録するようにlog4phpをセットアップしました。ただし、例外をログに記録すると、log4net で見慣れているようなスタック トレースなどの例外の詳細が表示されません。

コードをざっと見てみると、 LoggerAppenderMongoDB はmethodで例外を表示することをサポートしているようですが、他のアペンダーには似たようなものは見当たりません。formatThrowable

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

4

4 に答える 4

2

参考までに、これLoggerLayoutTTCCは非推奨になりました。LoggerLayoutPatternをより適切なフォーマット文字列とともに使用して、例外を含めることができます。

<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

于 2013-02-09T11:23:18.090 に答える
1

PHP の set_exception_handler 関数を使用し、この関数を使用して log4php をラップする必要があります。http://php.net/manual/en/function.set-exception-handler.phpで確認してください。

function exception_handler($exception) {

$log->debug($exception->getMessage()); }

set_exception_handler('exception_handler');

于 2012-08-24T12:17:44.693 に答える
1

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

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

LoggerLayoutTTCC を拡張し、format() をオーバーライドする独自のレイアウト クラスを追加しました。

    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());
        }
    }
于 2012-09-12T21:03:43.177 に答える