GMTC 全球大前端技术大会 8 折涨价倒计时 2 天,现在购票立减 ¥960 ! 了解详情
写点什么

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:406567
用户头像

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

关注

评论

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

面试官:你说一下对Java中的volatile的理解吧

云流

Java 编程 面试 多线程

京东RPA:以企业数字化转型为驱动的机器人流程自动化解决方案专家

京东科技开发者

RPA 企业信息化 数字化运维

自动驾驶和疫苗的相似之处——浅谈自动驾驶基本架构(28天写作 Day7/28)

mtfelix

自动驾驶 28天写作

Spring Boot如何动态修改日志级别

万里无云

Spring Boot actuator 日志级别

大数据知识专栏 - MapReduce入门

小马哥

Java 大数据 hadoop mapreduce 七日更

Soul网关实践 01|把项目跑起来

哼干嘛

Java 探索与实践 API网关 Soul网关

网络故障排除工具,你用过哪些?

「大厂攻略」打开线程 | 进程 | 协程的大门

我是程序员小贱

面试 操作系统

想做出好决定,让头脑来次时空旅行吧!

Justin

思维模型 决策 28天写作

谈谈SpringFramework与IoC依赖查找

Java架构师迁哥

聚焦目标,团队工作不再一盘散沙(中)

一笑

管理 敏捷 目标管理 目标追踪 28天写作

如何使用maven 轻松重构项目

田维常

maven

智能building之二 智能单体建筑

张老蔫

28天写作

LeetCode题解:105. 从前序与中序遍历序列构造二叉树,递归+使用索引,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Spring Boot 集成 Swagger2 展现在线接口文档

武哥聊编程

Java springboot SpringBoot 2 swagger 28天写作

28 天带你玩转 Kubernetes-- 第七天(玩转 Dockerfile)

Java全栈封神

Docker Kubernetes k8s Dockerfile 28天写作

Flutter技术在会展云中大显身手

京东科技开发者

小程序flutter, 跨平台 云服务 移动开发

最近很火的京东、天猫超市飞天茅台抢购是怎么回事,从原理流程给你们分析一波

谙忆

读书笔记:《激荡三十年》上

lidaobing

28天写作 激荡三十年

2020 全球 JS 调查报告新鲜出炉

蓝色的秋风

typescript Vue 前端 React React Native

Python 循环语句

老赵

28天写作

Mysql报表下载为什么出现了重复的数据?

三石

MySQL性能优化 28天写作 mysql重复数据

贸易战的本质是什么?

JiangX

经济 28天写作 制造 美国 贸易战

日语复习Day01【~あげく(に)】

IT蜗壳-Tango

七日更 日语语法 情景句型 程序员日语

愿景的力量

陆陆通通

愿景 28天写作

精选算法面试-数组II

李孟

面试 算法 数组 28天写作

MySQL查询——连接查询

程序员的时光

程序员 28天写作

杂谈

.

28天写作

乐观主义

三只猫

28天写作

创业失败启示录|校园微生活之快叫外卖

青城

28天写作 创业失败启示录 青城

夜莺二次开发指南系列

qinyening

开源 监控 滴滴夜莺 夜莺监控 运维平台

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