42

I'm using this right now:

error_log(serialize(debug_backtrace()));

But I have to unserialize it every time. Is there a better way to store backtraces?

Leo Jiang
  • 21,891
  • 43
  • 133
  • 242

6 Answers6

59

This should generate a readable string:

error_log(print_r(debug_backtrace(), true));

Additionally, debug_print_backtrace() prints the back trace as string and its output can be captured with regular output buffer functions:

ob_start();
debug_print_backtrace();
error_log(ob_get_clean());
Álvaro González
  • 135,557
  • 38
  • 250
  • 339
  • 13
    `debug_backtrace()` returns a big array, which doesn't print_r real well. The second method prints a nicer looking backtrace. Another method I sometimes use is just `error_log(new Exception('message here, if you want'));` because I like the way the backtrace is formatted for exceptions. – Jay K Oct 14 '16 at 20:24
  • 1
    @JayK - FWIW, sassman on a comment on Igor's answer says about Exception: *"But it does not include the variables of the calling scope. The benefit of debug_print_backtrace() is it includes a copy of the runtime context."* – ToolmakerSteve Apr 17 '19 at 19:15
18

From my perspective the best approach is using an exception functionality:

$e = new Exception();
$e->getTraceAsString();
Igor Sydorenko
  • 1,765
  • 11
  • 12
8
    $log = var_export(debug_backtrace(), true);

Then use the variable $log to log in file or what ever.

Mathias Lykkegaard Lorenzen
  • 14,077
  • 22
  • 91
  • 177
Pramendra Gupta
  • 14,279
  • 4
  • 32
  • 34
4

A little ugly but workable, I do this:

 error_log('Identifying string so that it doesn\'t just end up as gibberish' . json_encode(debug_backtrace()));
Mathias Lykkegaard Lorenzen
  • 14,077
  • 22
  • 91
  • 177
Kzqai
  • 21,980
  • 22
  • 103
  • 132
3

For those who might want a more compact version, this will also do the trick:

error_log((new Exception())->getTraceAsString())
Nicolas Bouvrette
  • 3,228
  • 1
  • 30
  • 44
1

The following can either be written to a .txt file or you can also access it's contents (like $content[0]) as opposed to var_export which is a bit trickier I find:

    $content = unserialize(serialize(debug_backtrace()));
Robert Sinclair
  • 3,719
  • 1
  • 32
  • 35