5

警告: 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

如您所见,错误以“...”结尾,这让我认为它被截断了。有没有办法打印完整的报告?

而且,有没有办法让它漂亮地打印出来?

谢谢!

4

3 回答 3

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
于 2013-07-12T15:56:30.697 回答
2

Erlang 模拟器会截断错误消息,因此无法从 sasl 获取完整消息。有一个未记录的开关,您可以使用它来查看更多消息。"erl +# 400" 在 400 而不是 200 个字符处截断。

更多细节:http ://erlang.org/pipermail/erlang-questions/2014-October/081442.html

于 2014-10-29T17:31:23.837 回答
0

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

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

在此处查找自定义报告处理程序的示例。

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

error_logger:add_report_handler(?MODULE, []).

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

于 2013-07-11T21:03:32.670 回答