写点什么

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

2018 年 8 月 07 日

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

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

复制代码
<pre data-anchor-id="lty0">

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的日志调用:

复制代码
<pre data-anchor-id="yfcf">

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 还提供了文档注解作为文档元数据,如下所示:

复制代码
<pre data-anchor-id="sn65">

@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

2018 年 8 月 07 日 10:406504
用户头像

发布了 1008 篇内容, 共 308.4 次阅读, 收获喜欢 273 次。

关注

评论

发布
暂无评论
发现更多内容

特斯拉自建ERP的背后

明道云

物流快递公司APP架构设计

jorden wang

蚂蚁Java三面:二叉树+HTTPS加密+自旋锁+缓存穿透(送答案)

Java成神之路

Java 程序员 架构 面试 编程语言

区块链科普系列:区块链是什么?

CECBC区块链专委会

区块链

「产品经理训练营」第一章作业

Sòrγy_じò ぴé

产品经理训练营

敏捷里为何倡导固定迭代周期?

万事ONES

敏捷开发 研发管理 迭代

4大应用场景,16张高阶布局大屏,最具价值的数据可视化都在这里!

一只数据鲸鱼

物联网 数据可视化 智慧大屏可视化 3D可视化

一文解析DDD中台和微服务设计

欧创新

中台 微服务 领域驱动设计 DDD 微服务划分

Volcano架构设计与原理介绍

华为云原生团队

大数据 AI 云原生 高性能 批量计算

为什么我认为 Deno 是一个迈向错误方向的 JavaScript 运行时?

hylerrix

typescript rust nodejs deno V8

刚参加完阿里P6面试归来(Offer已斩获),6点面试经验总结

Java成神之路

Java 程序员 架构 面试 编程语言

生产者与消费者模式,数组阻塞队列(ArrayBlockingQueue)

码农架构

Java 学习 并发编程 架构、

架构师训练营W13作业

Geek_f06ede

初识ClickHouse——安装与入门

Simon

Clickhouse

Soul 网关源码阅读(一) 概览

Java 源码阅读 网关

一文带你探究Sentinel的独特初始化

华为云开发者社区

redis sentinel 框架

“反垄断”来袭,对产业区块链有什么启发

CECBC区块链专委会

市场垄断

Soul 网关源码阅读(二)代码初步运行

Java 源码阅读 网关

工作10年,面试超过500人想进阿里的同学,总结出的108道Java面试题

Java成神之路

Java 程序员 架构 面试 编程语言

即构小程序直播组件集成教程

ZEGO即构

从CPU到XPU进化,英特尔对业界放了什么大招?

intel001

面试阿里Java岗,技术总监真正关心的核心能力是什么?

Java架构追梦

Java 编程 架构

Soul 网关源码阅读(三)请求处理概览

Java 源码阅读 网关

区块链十年与传统金融的变化

CECBC区块链专委会

区块链 金融

不同公司产品经理岗位对比

LouisN

矿机挖矿APP系统模式开发平台

v16629866266

iOS性能优化 — 五、App启动优化

iOSer

ios 性能优化 性能分析

当音乐学博士搞起编程...

程序猿DD

Spring Frame

用AI「驯服」人类幼崽,手头有娃的可以试试

博文视点Broadview

人工智能 联邦学习 强化学习 集成学习 技术宅

DevSecOps安全检查清单

啸天

安全 DevSecOps 应用安全

在数据分析、挖掘方面,有哪些ETL工具值得推荐?

会飞的鱼

大数据处理 kettle 海豚调度 批量任务 ETL

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