Elixir 1.7改进错误处理、日志和测试

Elixir 1.7致力于提升开发者体验,Elixir创建者José Valim这样写道。其中包括新增__STACKTRACE__结构检索堆栈踪迹,集成Erlang新增的:logger模块,改进Elixir的单元测试库ExUnit,支持文档元数据。

\u0026#xD;\u0026#xD;

Elixir 1.7改进了异常系统,ArgumentErrorArithmeticErrorKeyError异常提供了更多的诊断信息,并且新增一个__STACKTRACE__结构,可以用于代替System.stacktrace/0来检索堆栈踪迹:

\u0026#xD;\u0026#xD;
\u0026#xD;try do\u0026#xD;  ... 某个可能失败的操作 ...\u0026#xD;rescue\u0026#xD;  exception -\u0026gt;\u0026#xD;    log(exception, __STACKTRACE__)\u0026#xD;    reraise(exception, __STACKTRACE__)\u0026#xD;end\u0026#xD;
\u0026#xD;\u0026#xD;

__STACKTRACE__的作用域是在词法上确定的,不依赖于副作用,这点和System.stacktrace/0不同。据Valim介绍,这将给未来的Elixir版本带来性能提升,因为它使得try块结束后就不用再跟踪堆栈踪迹了。

\u0026#xD;\u0026#xD;

Elixir Logger模块现在插入了Erlang的:logger,这是由Erlang/OTP 21提供的,充分利用了后者丰富的元数据,包括:

\u0026#xD;\u0026#xD;
  • :crash_reason是一个包含两个元素的元组,第一个参数表示原因,包括抛出/错误/退出,第二个是堆栈踪迹。抛出的结构总是{:nocatch, term},错误总是Exceptions,而退出则涵盖了剩余的情况。\u0026#xD;\t
  • :initial_call是进程开始时的初始调用。\u0026#xD;\t
  • :registered_name是进程作为atom注册后的名称。\u0026#xD;

此外,如果消息没有有效记录,那么Logger宏如debuginfo等就不会对它们的参数求值,新增的:compile_time_purge_matching选项允许基于编译时元数据过滤日志条目。例如,下面的代码展示了如何配置Logger使其忽略来自application :foo级别低于:info以及所有来自Bar.foo/3的日志调用:

\u0026#xD;\u0026#xD;
\u0026#xD;config :logger,\u0026#xD;  compile_time_purge_matching: [\u0026#xD;    [application: :foo, level_lower_than: :info],\u0026#xD;    [module: Bar, function: \"foo/3\"]\u0026#xD;  ]\u0026#xD;
\u0026#xD;\u0026#xD;

如上所述,Elixir的单元测试库ExUnit也经过了改进,宏assert返回的信息更详细了。例如,如果assert some_function(expr1, var2)语句失败,它就会打印出some_function的参数值,这样,就可以为开发人员节省下重新运行测试来查看它们的值的时间。

\u0026#xD;\u0026#xD;

最后,Elixir 1.7还提供了文档注解作为文档元数据,如下所示:

\u0026#xD;\u0026#xD;
\u0026#xD;@moduledoc \"A brand new module\"\u0026#xD;@moduledoc authors: [\"Jane\
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值