Сокращенное сообщение об ошибке в 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.

Другие вопросы по тегам