BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Sergio De Simone 关注 14 他的粉丝 ,译者 谢丽 关注 11 他的粉丝 发布于 2018年8月8日. 估计阅读时间: 4 分钟 | BCCon2018全球区块链生态技术大会,将区块链技术的创新和早期落地案例带回您的企业

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

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

try do
  ... 某个可能失败的操作 ...
rescue
  exception ->
    log(exception, __STACKTRACE__)
    reraise(exception, __STACKTRACE__)
end

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

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

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

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

config :logger,
  compile_time_purge_matching: [
    [application: :foo, level_lower_than: :info],
    [module: Bar, function: "foo/3"]
  ]

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

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

@moduledoc "A brand new module"
@moduledoc authors: ["Jane", "Mary"], since: "1.4.0"

Elixir 1.7中的ExDoc工具能够利用这些元数据标识出使用已弃用模块、函数、回调和类型的地方,并能在引入特定的特性时显示出来。

要了解更多的变更信息,请查阅Elixir 1.7的发布说明

查看英文原文:Elixir 1.7 Improves Error Handling, Logging, and Testing

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT