2013-07-11 55 views
4

警告:erlang n00b提前。erlang中的截断错误报告

我想要抓住erlang,只是尝试一个基本的牛仔世界应用程序。我仿真错误,基本上在我的代码某处返回一个无效的值,并试图解释错误,那就是:

=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 

正如你所看到的,错误以“...”结尾,这使我认为它被截断。有什么方法可以打印完整的报告?

而且,有没有什么办法让它变得漂亮呢?

谢谢!

+0

尝试增加'-boot start_sasl'到'erl'命令线;这应该会给你更详细的错误报告。 – legoscia

+1

刚刚尝试过,现在它也打印“进度报告”,但该错误仍然被截断。 – Matt

回答

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 
]} 

]. 

然后把ERL节点与开始SASL。日志将被印制成sasl.log

erl -boot start_sasl -config app.config 
0

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

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

查看here作为自定义报告处理程序的例子。

并且必须添加自定义处理程序的错误报告用户:

error_logger:add_report_handler(?MODULE, []). 

或者你可以使用支持error_logger一个日志库。