61

PHP で例外をキャッチしないと、error.logファイルに役立つエラー メッセージとスタック トレースが表示されます。たとえば、次のように実行すると:

<?php

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

  foo();

?>

次に、これをログに書き込みます。

[2013 年 3 月 6 日水曜日 10:35:32] [エラー] [クライアント 86.146.145.175] PHP の致命的なエラー: キャッチされていない例外 'Exception' とメッセージ 'Oh no!' in /var/www/test.php:4\nスタック トレース:\n#0 /var/www/test.php(7): foo()\n#1 {main}\n /var/www/ でスロー4 行目の test.php

例外をキャッチしたい場合もありますが、それでもその詳細をログに記録します。私は次のようなものを想像しています:

<?php

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

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

?>

wherelog_exceptionは、キャッチされなかった例外に対して自動的に書き込まれるものと基本的に同じ形式で何かをエラー ログに書き込みCaught exceptionますPHP Fatal error: Uncaught exception

このような例外情報をログに記録したり、文字列にキャプチャしたりする組み込み関数はありますか? 私はtraceback.format_exc()Pythonに似たものを想像しています。

4

4 に答える 4

10

PHP の基本Exceptionクラスのメソッドを使用できます。

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

于 2013-03-06T10:55:43.350 に答える
7

Monolog を使用して、アプリケーションでログを記録します。Monolog には、スタック トレースを出力できるフォーマッタがあります。トレースで例外をログに記録するには、LineFormatter を使用して includeStacktraces() を呼び出します。(以下のコード)

$handler = new \Monolog\Handler\StreamHandler(STDOUT);

$lineFormatter = new \Monolog\Formatter\LineFormatter();
$lineFormatter->includeStacktraces();

$handler->setFormatter($lineFormatter);

$logger = new \Monolog\Logger('root', [$handler]);

try {
    //do some throwing
} catch (Exception $e) {
    //do some logging, add exception to context
    $logger->error($e->getMessage(), ['exception' => $e]);
}
于 2018-03-23T09:53:53.003 に答える
-3

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

于 2013-03-06T11:00:32.103 に答える