在erlang中截断错误报告

时间:2013-07-11 14:53:27

标签: 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 个答案:

答案 0 :(得分:5)

你看到的是sasl的tty处理程序。它将报告格式化并写入控制台。在格式化过程中它可以删除一些有用的数 要避免它,请使用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
]}

].

然后带启动sasl的erl节点。日志将打印到sasl.log

erl -boot start_sasl -config app.config

答案 1 :(得分:2)

错误消息被Erlang仿真器截断,因此无法从sasl获取完整消息。有一个未记录的开关,您可以使用它来查看更多消息。 &#34; erl +#400&#34;截断为400而不是200个字符。

更多详情:http://erlang.org/pipermail/erlang-questions/2014-October/081442.html

答案 2 :(得分:0)

我认为没有简单的方法可以告诉sasl不截断错误报告。

您可以做的是为报告创建自己的处理程序,并以不截断的方式记录错误。 (例如io:format("~p", [Error]))。

查看here以获取自定义报告处理程序。

您必须将自定义处理程序添加为错误报告的订阅者:

error_logger:add_report_handler(?MODULE, []).

或者您可以使用支持error_logger的日志记录库。