print-stack-trace

added
1.1

ns
clojure.stacktrace

type
function

(print-stack-trace tr) (print-stack-trace tr n)

Prints a Clojure-oriented stack trace of tr, a Throwable.
Prints a maximum of n stack frames (default: unlimited).
Does not print chained exceptions (causes).

                (clojure.stacktrace/print-stack-trace (Exception. "foo"))
; java.lang.Exception: foo
;  at user$eval112.invoke (NO_SOURCE_FILE:1)
;     clojure.lang.Compiler.eval (Compiler.java:6619)
;     clojure.lang.Compiler.eval (Compiler.java:6582)
;     clojure.core$eval.invoke (core.clj:2852)
;     clojure.main$repl$read_eval_print__6588$fn__6591.invoke (main.clj:259)
;     clojure.main$repl$read_eval_print__6588.invoke (main.clj:259)
;     clojure.main$repl$fn__6597.invoke (main.clj:277)
;     clojure.main$repl.doInvoke (main.clj:277)
;     clojure.lang.RestFn.invoke (RestFn.java:1096)
;     clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__3615.invoke (interruptible_eval.clj:56)
;     clojure.lang.AFn.applyToHelper (AFn.java:159)
;     clojure.lang.AFn.applyTo (AFn.java:151)
;     clojure.core$apply.invoke (core.clj:617)
;     clojure.core$with_bindings_STAR_.doInvoke (core.clj:1788)
;     clojure.lang.RestFn.invoke (RestFn.java:425)
;     clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:41)
;     clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn__3656$fn__3659.invoke (interruptible_eval.clj:171)
;     clojure.core$comp$fn__4154.invoke (core.clj:2330)
;     clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__3649.invoke (interruptible_eval.clj:138)
;     clojure.lang.AFn.run (AFn.java:24)
;     java.util.concurrent.ThreadPoolExecutor.runWorker (:-1)
;     java.util.concurrent.ThreadPoolExecutor$Worker.run (:-1)
;     java.lang.Thread.run (:-1)
;=> nil

(clojure.stacktrace/print-stack-trace (Exception. "foo") 4)
; java.lang.Exception: foo
;  at user$eval124.invoke (NO_SOURCE_FILE:1)
;     clojure.lang.Compiler.eval (Compiler.java:6619)
;     clojure.lang.Compiler.eval (Compiler.java:6582)
;     clojure.core$eval.invoke (core.clj:2852)
;=> nil
            
                ;; if you need to capture the stack trace in a string.
(with-out-str (clojure.stacktrace/print-stack-trace (Exception. "foo") 4))
;; "\
  clojure.core/eval  core.clj: 3211\
  ... \
  boot.user$eval1726.invoke          : 1\
boot.user$eval1726.invokeStatic  :  1\
java.lang.Exception: foo\
"