如何将AI能力与大数据技术结合,助力数据分析治理等工作的效率大幅提升,优化大数据引擎的性能及成本? 了解详情
写点什么

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

  • 2018-08-07
  • 本文字数:1057 字

    阅读完需:约 3 分钟

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-08-07 10:407645
用户头像

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

关注

评论

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

架构实战营毕业总结

9527

#架构实战营

趁着课余时间学点Python(十二)面向对象的理解(结局)

ベ布小禅

8月日更

QDS06 Iperf 测网速

耳东@Erdong

8月日更 qds iperf

了,来了!Nacos 2.0的Spring Boot Starter终于来了

Summer

Java 学习 程序员 架构 springboot

爆赞!GitHub上首本IntelliJ IDEA操作手册,标星果然百万名不虚传

Java~~~

Java 架构 面试 IDEA 架构师

腾讯三面落马+拒网易、CVTE后,字节四面成功拿下offer

编程菌

Java 编程 程序员 面试 计算机

支持高性能计算场景,博云容器云打造智能算力引擎

BoCloud博云

容器 高性能计算

【得物技术】初探 OpenResty

得物技术

nginx 性能 openresty tengine

前端之算法(三)归并排序

Augus

数据结构与算法 8月日更

信息过载,加班无度的时代,我们需要「洞穴空间」

非著名程序员

个人成长 提升认知 思维 8月日更

在科技圈流行的冥想,为什么没有全民推广?

脑极体

决定论:区块链的哲学

CECBC

GitHub上火了这份堪称神级的SpringBoot手册,竟出自滴滴之手

Java~~~

Java 架构 面试 微服务 Spring Boot

干货分享!通过Dapr快速落地DDD,实现高并发

云原生开发者社区

出自清华大神之手的JVM实战手册,刚上架GitHub点赞就达到85k

Java~~~

Java 架构 面试 JVM 多线程

让GitHub炸锅的深入理解MySQL实战手册,竟出自阿里云“藏经阁”

Java~~~

Java MySQL 数据库 架构 面试

JDK从8升级到11,使用 G1 GC,HBase性能下降20%。JDK 到底干了什么

Summer

Java 学习 程序员 架构 jdk

红黑树的理解与 Java 实现

编程菌

Java 编程 程序员 计算机 技术宅

投资ipfs挖矿有风险吗?投资ipfs挖矿要多少钱?

投资ipfs挖矿有风险吗 投资ipfs挖矿要多少钱

实时音视频,是一门好的ToB生意吗?

ToB行业头条

中国如何应对中美科技博弈?

石云升

科技革命 8月日更 启发 中美博弈

终于有人把操作系统、网络系统、线程进程、IO模型全部总结出来了

Java~~~

Java 架构 面试 TCP 网络

音频技术及行业的发展

声网

音频技术

网络安全行业真的内卷了吗?

网络安全学海

网络安全 信息安全 网络 渗透测试 安全漏洞

低耦合、高内聚?

escray

学习 极客时间 如何落地业务建模 8月日更

百度程序员:面试官看过我的博客,所以没敢问我多线程

今晚早点睡

Java 百度 程序员 面试 计算机

阿里首本凤凰架构竟要付费,构建大型分布式系统的指南这么宝贵吗

Java~~~

Java 架构 面试 分布式 高并发

腾讯三面:哨兵挂了,Redis还能正常工作吗?

Summer

Java redis 学习 程序员 架构

更智能更高效,区块链打造更美服装行业

CECBC

浅谈云上攻防——对象存储服务访问策略评估机制研究

腾讯安全云鼎实验室

云原生 对象存储 数据安全 云上安全攻防

面对物联网安全隐患高墙,熵核科技如何实现突围

熵核科技

物联网安全

Elixir 1.7改进错误处理、日志和测试_Erlang_Sergio De Simone_InfoQ精选文章