php – 使用堆栈跟踪记录捕获的异常

如果我没有在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

有时候我想抓住这个异常,但仍然记录这个细节。我想像的是:

<?php

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

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

?>

其中log_exception将以错误日志的形式写入基本相同的格式,这些格式与自动为一个未捕获的异常写入一样 – 除了具有捕获异常而不是PHP致命错误之外,也可能完全相同:未捕获的异常。

是否有内置函数来记录异常信息,或将其捕获到字符串?我想象Python中的traceback.format_exc()的一些分析。

error_log($e);

做你想要的它记录完全相同的事情,如果你没有捕获异常,减去开头的单词“未捕获”。这样做是因为这是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!");
});
翻译自:https://stackoverflow.com/questions/15245184/log-caught-exception-with-stack-trace

转载注明原文:php – 使用堆栈跟踪记录捕获的异常