Сокращенное сообщение об ошибке в erlang
Предупреждение: Erlang N00B впереди.
Я пытаюсь понять erlang, и просто пытаюсь использовать приложение Hello World с ковбоем. Я имитирую ошибку, возвращаю неверное значение где-то в моем коде и пытаюсь интерпретировать ошибку:
=ERROR REPORT==== 11-Jul-2013::15:45:00 ===
Error in process <0.167.0> with exit value: {{try_clause,{ok, {http_req,#Port<0.3619>,ranch_tcp,keepalive,<0.167.0>,<<3 bytes>>,'HTTP/1.1', {{127,0,0,1},60312},<<9 bytes>>,undefined,8081,<<1 byte>>,undefined,<<0 bytes>>,undefined,[],[{<<10 bytes>>,<<11 bytes>>},{<<4 bytes>>,<<14 bytes>>},{<<6 bytes>>,<<3 bytes>>}],[],undefined,[],waiting,undefined,<<0 bytes>>,false,waiting,[],<<0 bytes>>,undefined}}}, [{cowboy_handler,handler_init,4,[...
Я настроил свое приложение с помощью арматуры, и я запускаю его с помощью:
erl -pa ebin deps/*/ebin -s myapp
Как видите, ошибка заканчивается на "...", что заставляет меня думать, что оно усечено. Есть ли способ напечатать полный отчет?
И есть ли способ сделать его красивым - напечатать это?
Спасибо!
3 ответа
То, что вы видите, это tty handler sasl. Он форматирует и записывает отчеты в консоль. Во время форматирования он может вырезать некоторые полезные данные. Чтобы избежать этого, используйте error_logger_mf_h
обработчик, как это:
Создайте app.config
файл для передачи некоторых переменных в sasl:
[
{sasl, [
{sasl_error_logger, {file, "sasl.log"}},
{errlog_type, all},
{error_logger_mf_dir, "."}, % Log directory
{error_logger_mf_maxbytes, 10485760}, % 10 MB max file size
{error_logger_mf_maxfiles, 5} % 5 files max
]}
].
Затем приведите узел erl с запущенным sasl. Журналы будут напечатаны в sasl.log
erl -boot start_sasl -config app.config
Сообщение об ошибке усекается эмулятором Erlang, поэтому невозможно получить полное сообщение от sasl. Существует недокументированный переключатель, который можно использовать для просмотра большей части сообщения. "erl +# 400" усекается до 400 вместо 200 символов.
Более подробная информация: http://erlang.org/pipermail/erlang-questions/2014-October/081442.html
Я считаю, что нет простого способа сказать sasl не обрезать отчет об ошибке.
Что вы можете сделать, это создать свой собственный обработчик для отчетов и регистрировать ошибку так, чтобы она не была усечена. (например io:format("~p", [Error])
).
Посмотрите здесь пример специального обработчика отчетов.
И вы должны добавить свой собственный обработчик как подписчик отчетов об ошибках:
error_logger:add_report_handler(?MODULE, []).
Или вы можете использовать библиотеку журналов, которая поддерживает error_logger.