“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

Google 发布新的 Java 日志框架 Flogger,总体可读性增加

  • 2019-05-07
  • 本文字数:1075 字

    阅读完需:约 4 分钟

Google 发布新的 Java 日志框架 Flogger,总体可读性增加

Google 近期新发布了一种称为Flogger的开源 Java 日志框架。总所周知,“在开源 Java 日志 API 领域中已充斥了多种产品”。但据 Google 宣称,Flogger 可“比现有的日志 API 提供更多的优点”。其中包括:降低了禁用日志语句的代价、增加了总体的可读性,以及对可扩展性的支持。


“Flogger”源自于“Fluent”和“logger”的混合。Flogger 宣称其主要优点之一是“对于已禁用日志层级的完全无代价实现”,而其他所有日志记录框架依然可能会对已禁用的日志语句生成字节码。Flogger 在设计上考虑了完全避免产生额外的代价。


具体而言,由于无法预先确定日志方法调用中的参数数量,为避免维护成百上千难以预测的各异方法签名,日志框架通常采用了 varargs 机制。但使用 varargs 会额外生成字节码,特别是需要分配 Object []对象存储 varargs。尽管在通常情况下并不需要特别关注这些字节码,但如果应用中日志记录的粒度非常细,或是日志记录语句出现在程序循环体中,那就不容忽视了。


Flogger 通过 API 设计避免产生此类额外的代价。Fluent 调用链始终以选择器(selector)为开始。该选择器指定了 atInfo()等特定的日志级别,并返回该日志记录级别的一个实现。在禁用日志语句的情况下,选择器返回一个单例(singleton)空操作(np-op)实现。


Flogger 正着力改进的另一个方向是可读性。据 Google 介绍,Flogger 提供了更具表现力的 Fluent API,支持更丰富的“自记录日志语句”。下例给出了一个典型的日志记录语句,用于记录错误及异常。


log.error("The arg, '{}' caused an error", arg, exception)
复制代码


在 Flogger 中,同一语句实现为:


logger.atError()  .withCause(exception)  .log("The arg, ‘%s’ caused an error", arg);
复制代码


除了可读性方面的改进之外,Flogger 还在设计中考虑了可扩展性,并支持自定义扩展。使用 Flogger,开发人员“可以局部扩展日志 API,并在 Fluent 方法链中添加其他方法”。


目前,Flooger 自定义扩展的文档和示例还很有限。Google 只提供了一个创建 UserLogger 的示例。UserLogger 对每个用户给出了独立于主日志文件的单独日志记录。


logger.at(INFO)  .forUserId(id)  .log("Message: %s", param);
复制代码


Flogger 项目的GitHub网站提供了更多信息,其中包括新手指南最佳实践文档。


译者注:使用日志框架中,另一个需要考虑的主要代价来自于日志的实时组装。Flogger 中考虑了惰性评估( lazy evaluation)技术,即在代码实际运行时执行定义的操作。当然,该技术也被所有主流日志框架使用,例如 log4j 和 SLF4j 等,并非 Flogger 独具的亮点。


查看英文原文: Google Releases New Java Logging Framework


2019-05-07 08:0014595
用户头像

发布了 391 篇内容, 共 125.9 次阅读, 收获喜欢 255 次。

关注

评论

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

JavaScript 学习笔记——数据类型

zjlulsum

Java 学习 大前端 类型推断 入门

办公人员的 python 妙用——抽签结果提取

小匚

Python 远程办公

OceanBase原理与实现分析

ElvinYang

C语言运算符

C语言技术网-码农有道

C语言 运算符

“随大流”的你是不会成功的

小天同学

个人成长 思考 写作平台 感悟 坚持

放假了,你还会打开钉钉么?

无箭的丘比特

高效工作 团队管理 企业文化 个人成长 技术管理

探寻融云多年领先的秘密:不断创新贴近开发者真实需求

DT极客

C语言if分支结构

C语言技术网-码农有道

C语言 C语言if分支结构

保险知识梳理

魁拔

保险 生活质量

深入理解MDL元数据锁

Simon

MySQL

每个人都应该知道的性能参数

ElvinYang

对话 CTO | 听快看漫画 CTO 李润超讲重塑漫画产业的技术推动力

ONES 王颖奇

研发管理 CTO 动画 文化

前端开发的瓶颈与未来之路

keelii

node.js typescript ruby-on-rails 编程 大前端

【Howe 学 JAVA】Java 类集框架2——Set 集合

Howe

Java 集合 set

如何扩大我们的英语词汇量

董一凡

学习

【Howe 学 JAVA】Java 类集框架1——List集合

Howe

Java List 集合

给应届毕业生们的七点建议

Neco.W

大学生日常 工作 应届毕业

高仿瑞幸小程序 06 layout布局

曾伟@喵先森

小程序 微信小程序 大前端

面试官竟然一直和我聊线程的启动和终止

Simon郎

Java 大数据 后端 多线程

自助设备系列——技术应用

孙苏勇

产品 行业资讯 智能设备

Python网络编程socket 简易聊天窗

Flychen

C语言常量、变量和关键字

C语言技术网-码农有道

C语言 常量 变量 关键字

C语言输入和输出

C语言技术网-码农有道

C语言 输入 输出

当前的经济形势,如何让自己免于风险?

鼎玉谷

对话 CTO | 喜茶也有 CTO?听陈霈霖讲讲茶饮中的技术甜度

ONES 王颖奇

研发管理 CTO 零售

你还在这样使用MYSQL吗?

无箭的丘比特

MySQL 数据库 数据库规范 数据库设计

《Linux就该这么学》笔记(一)

编程随想曲

Linux

工具集系列 02|还在为海报设计、LOGO 设计发愁?这些在线工具值得收藏

一尘观世界

效率工具 设计 海报 课程封面 知识付费

Using R for everything: 方差分解(Variation partition)变量筛选与显著性标注

洗衣机用户不会用洗衣机

数据分析 R

物联网资产整合架构

老任物联网杂谈

物联网架构

游戏夜读 | 游戏设计需要天赋?

game1night

Google 发布新的 Java 日志框架 Flogger,总体可读性增加_编程语言_Dustin Schultz_InfoQ精选文章