Just Stacktrace
На этот вопрос ответил Михал Мускала об официальном выпуске elixir github :
Канонический путьчтобы использовать Exception.format_stacktrace/1
Из документов ясно, что нам не нужно явно передавать __STACKTRACE__
в качестве аргумента методу, когда он все еще находится внутри rescue
блок.Он автоматически восстанавливается с помощью Process.info
:
Logger.error(Exception.format_stacktrace())
Полная ошибка и Stacktrace
Комментарий Михала помог мне найти Exception.format/3
, который форматирует саму ошибку и ее полную трассировку стека, и это выглядело более подходящим для моего варианта использования:
def unreliable_method do
# do something
:ok
rescue
err ->
Logger.error(Exception.format(:error, err, __STACKTRACE__))
{:error, :processing_failed}
end