Elixir:正确的打印方式__STACKTRACE__

时间:2018-12-03 07:55:55

标签: exception-handling elixir stack-trace rescue

我知道我们可以在的catch / rescue块中使用 Properties props=new Properties(); InputStream in = getClass().getResourceAsStream("/config.properties"); props.load(in); in.close(); int value=Integer.parseInt(props.getProperty("value")); 获取完整的堆栈跟踪信息,但是打印它的正确方法是什么?就我而言,我可以从错误中解救出来,但我仍然想将其记录到控制台。这就是我现在正在做的事情:

__STACKTRACE__

1 个答案:

答案 0 :(得分:4)

只需堆栈跟踪

MichałMuskałaofficial elixir github issue上回答了此问题:

  

规范的方法是使用Exception.format_stacktrace/1

从文档中可以明显看出,当仍位于__STACKTRACE__块中时,我们不需要显式传递rescue作为方法的参数。使用Process.info自动检索:

Logger.error(Exception.format_stacktrace())

完全错误 Stacktrace

Michal的评论帮助我找到了Exception.format/3,它可以格式化错误本身其完整的堆栈跟踪信息,并且似乎更适合我的用例:

def unreliable_method do
  # do something
  :ok
rescue
  err ->
    Logger.error(Exception.format(:error, err, __STACKTRACE__))
    {:error, :processing_failed}
end