2013-03-06 24 views
24

PHPで例外が発生しない場合は、error.logファイルにスタックトレースを含む有用なエラーメッセージが表示されます。例えば、私が実行した場合: スタックトレースでキャッチされた例外

<?php 

    function foo() { 
    throw new Exception('Oh no!'); 
    } 

    foo(); 

?> 

は、私は、これが私のログに書き込まれ得る:

[Wed Mar 06 10:35:32 2013] [error] [client 86.146.145.175] PHP Fatal error: Uncaught exception 'Exception' with message 'Oh no!' in /var/www/test.php:4\nStack trace:\n#0 /var/www/test.php(7): foo()\n#1 {main}\n thrown in /var/www/test.php on line 4

は時々私は例外をキャッチするが、まだその詳細をログに記録したいと思います。私のようなものを想像しています:log_exceptionは自動的に捕捉されない例外のために書き込まれますどのように基本的に同じ形式で、エラーログに何かを書き込みます

<?php 

    function foo() { 
    throw new Exception('Oh no!'); 
    } 

    try { 
     foo(); 
    } catch (Exception $e) { 
     log_exception($e); 
    } 

?> 

- 代わりPHP Fatal error: Uncaught exceptionCaught exceptionを持つ以外にも、おそらく、文字通り同じ。

このような例外情報を記録するか、文字列に取り込む組み込み関数はありますか?私はPythonでtraceback.format_exc()に類似した何かを想像しています。

答えて

36
error_log($e); 

あなたは何をしますか?それはあなたが例外をキャッチしなかった場合、最初に「Uncaught」という単語を除いたものと同じものをログに記録します。それはException class's __toString() magic methodが返すものなので、これを行います。

あなたはcatchブロックでこれを行うことができます。

try { 
    foo(); 
} catch (Exception $e) { 
    error_log("Caught $e"); 
} 

または例外ハンドラで:

set_exception_handler(function($exception) { 
    error_log($exception); 
    error_page("Something went wrong!"); 
}); 
+0

それを理解するための非常に有用な答え。 – kta

5

PHP's base Exception classのメソッドを使用できます。

getMessageを使用して、メッセージOh no!を取得し、getTraceAsStringを使用して、フォーマットされたトレースを取得します。

-2

http://php.net/manual/en/function.set-exception-handler.phpを使用すると、$ e-> getMessage()からメッセージを受け取るコールバック関数を登録できます。それをファイルにダンプします。

+5

説明は、これは正確には当てはまらないキャッチされない例外のハンドラを設定することを言います私は約尋ねています。 –

関連する問題