【发布时间】:2016-09-07 06:58:55
【问题描述】:
我构建了一些 api 端点,并尝试处理日志记录异常,因此我特意删除数据库并运行端点以获取 PDOException。
我的问题是,如果我没有发现异常,当我通过邮递员运行端点时,它会向我显示更详细的消息、堆栈跟踪等(大约 1000 行),
但是如果我用类似这样的 try catch 块捕获了异常
catch (\Exception $exception) {
print_r($exception->__toString());
print_r("\n\n");
die;
}
细节要少得多。这是为什么?当我们没有发现异常时,是否有打印相同的确切数据?
【问题讨论】:
-
$exception对象包含的信息比魔术 __toString() 方法所呈现的信息要多得多,看看实际的object methods and properties 就像getTrace() 一样 -
查看
debug_backtrace()。至于原因,可能是启用了 Xdebug,这是一个 PHP 扩展,它将循环遍历该函数的结果以提供堆栈跟踪。 -
而且你不需要显式调用
__toString();魔术方法的全部意义在于,如果您尝试回显对象,它会被隐式(神奇地)调用 -
@NickJ - 无需使用 debug_backtrace(); Exception 对象已经保存了堆栈跟踪信息
-
@MarkBaker 所以无论如何我可以像 print_r($exception) 那样做 smtg 吗?我想要与未捕获异常时相同的详细信息,以便记录它。
标签: php symfony exception logging exception-handling