20

我有个问题。我想在日志文件中记录特定情况下的回溯。debug_print_backtrace()为我的目的构建一个正确的字符串,但debug_print_backtrace()在屏幕上打印跟踪而不是返回它。

4

3 回答 3

23

使用另一个功能。 debug_backtrace()返回一个数组,您可以循环访问、格式化和保存:

$data = debug_backtrace();

或者对格式化的输出字符串使用输出缓冲:

ob_start();
debug_print_backtrace();
$data = ob_get_clean();
于 2013-10-28T20:29:11.217 回答
15

实际上,甚至可以用更少的代码来做到这一点。避免使用...进行缓冲的开销

$error_string = (new Exception)->getTraceAsString();

debug_print_backtrace()这为您提供了与存储到$error_string变量中完全相同的输出。

如果您想获取更多信息以获取更有价值的堆栈跟踪(行号、本地对象变量等),请尝试...

$error_string = print_r($e->getTrace(), true);
于 2016-03-11T01:34:08.610 回答
-1

要补充@HoldOffHunger给出的答案,以下内容足以用于记录目的:

$this->log(print_r(debug_backtrace(), true));
于 2017-11-08T10:52:57.927 回答