我知道我们可以在elixir的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__
答案 0 :(得分:4)
MichałMuskała在official elixir github issue上回答了此问题:
规范的方法是使用
Exception.format_stacktrace/1
从文档中可以明显看出,当仍位于__STACKTRACE__
块中时,我们不需要显式传递rescue
作为方法的参数。使用Process.info
自动检索:
Logger.error(Exception.format_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