阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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

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

关注

评论

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

Vue&SpringBoot前后端项目分离构建

夏悸

Spring Boot Vue 大前端

9种 分布式ID生成方案,我替你整理好了

程序员小富

Java MySQL 分布式

地摊经济一千年:从《韩熙载夜宴图》到木屋烧烤“撸串”

punkboy

产品经理 商业 新闻动态 新基建 地摊

分布式场景之刚性事务-2PC详解

奈学教育

分布式 2PC

不同层次格局的差异

kimmking

CDN百科第三讲 | 如果用了云服务器,还需要做CDN加速吗?

阿里云Edge Plus

CDN

观察者模式——窥探JDK和Spring中的设计模式

大头星

spring jdk 面试 设计模式 Java 25 周年

装饰模式——看JDK和Spring是如何杜绝继承滥用的

大头星

Java spring jdk 面试 设计模式

白话说流——什么是流,从批认识流(一)

KAMI

大数据 flink 流计算

如果我能找到工作,那么你也行

escray

有时候爱也是一种负担

小天同学

日常思考 爱情 个人感悟

六处提及区块链!海南自贸港区块链产业应用先行,与“币”划清界限

CECBC

区块链技术 海南方案 严控 产业

别再说你不懂Linux内存管理了,10张图给你安排的明明白白

程序员柠檬

Linux 后台开发

RUST IN BLOCKCHAIN 五月简报

Aimee 阿敏

rust crypto blockchain

人人都能看懂的 6 种限流实现方案!(纯干货)

王磊

Java 「Java 25周年」 Java 25 周年

我的编程之路 -7(T型人才)

顿晓

T型人才 编程之路

架构师训练营-第一节

Geek_af3d01

2020.06.04,我在《架构师训练营》的学习历程:架构方法

程序员二师兄

极客大学架构师训练营

ChaosBlade:从零开始的混沌工程(一)

郭旭东

云原生 混沌工程

原创 | TDD工具集:JUnit、AssertJ和Mockito (十八)编写测试-测试执行顺序\嵌套的测试

编程道与术

Java 编程 TDD 单元测试 JUnit

【写作群星榜】5.29~6.4写作平台优秀作者&文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

ARTS - Week 2

Khirye

ARTS 打卡计划 arts

初识软件架构

陈皮

Architecture Architect

极客大学架构师训练营 听课总结 -- 第一课

John(易筋)

极客时间 架构 极客大学 架构师 极客大学架构师训练营

不到100行代码的iOS组件化你怕了么?

毒手疯波

ios 组件化 url scheme scheme

自学技术看这些网站就够了!

我是程序员小贱

学习

绝对坦诚:打造团队自我进化能力的最佳姿势

伴鱼技术团队

团队管理 企业文化 团队协作 技术管理 文化

分布式事务 - 分布式事务框架Seata

Java收录阁

分布式事务

使用Nginx防止IP地址被恶意解析

Noneplus

nginx 恶意解析

ARTS-week1

书生

重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)

小傅哥

设计模式 小傅哥 重构 代码质量 桥接模式

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