阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

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

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

关注

评论

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

左益豪:用代码创造一个新世界|OneFlow U

OneFlow

实习 社区之星

如何用建木CI构建前端E2E质量自查

Jianmu

DevOps 前端 持续集成 代码质量 自动化测试

Kubernetes资源编排系列之四: CRD+Operator篇

阿里云大数据AI技术

大数据 运维

Java 在Word中合并单元格时删除重复值

在下毛毛雨

java; 合并单元格 删除重复值

Spring(五、注解开发)

开源 8月月更

Dapr在Java中的实践 之 服务调用

万猫学社

微服务 dapr Sidecar

业务缓存之体系化设计与开发

Qunar技术沙龙

系统开发

K8S之Flannel的vxlan网络模式初步源码解析

k8s flannel 签约计划第三季

Dapr在Java中的实践 之 环境准备

万猫学社

微服务 dapr Sidecar

转转商品系统高并发实战(数据篇)

转转技术团队

分布式 高并发

数据库不推荐使用外键的9个理由!

TimeFriends

8月月更

使用类似搭积木的低代码开发方式进行 SAP API 开发

Jerry Wang

低代码 云平台 SAP 8月月更 low-code

自动驾驶中的SLAM

博文视点Broadview

结合“xPlus”探讨软件架构的创新与变革

BizFree

敏捷开发 软件架构 数字化 信息化 软件定制

STM32的内存管理相关(内存架构,内存管理,map文件分析)

矜辰所致

内存 stm32 Flash 8月月更

HMS Core分析服务智能运营6.5.1版本上线

HMS Core

PWA 应用 Service Worker 缓存的一些可选策略和使用场景

Jerry Wang

typescript 前端开发 angular Service Worker 8月月更

以技术御风险,护航云原生 | 同创永益 X 博云举办产品联合发布会

BoCloud博云

云计算 容器 云原生

分分钟快速定制您的专属个性化软件应用——BizTool自动化工具简介

BizFree

软件开发 快速开发 低代码开发 个性化 应用开发

STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)

DS小龙哥

8月月更

Dapr在Java中的实践 之 状态管理

万猫学社

Java 微服务 dapr Sidecar

5S软件就是将软件应用全维度简单化的软件系统

BizFree

k8s 敏捷开发 软件架构 高性能 快捷调试

鲲鹏开发者创享日2022:鲲鹏全栈创新 与开发者共建数字湖南

科技热闻

易周金融分析 | 互联网系小贷平台密集增资;上半年银行理财子公司综合评价指数发布

易观分析

金融 分析 易周金融

写给 Java 程序员的前端 Promise 教程

江南一点雨

Java spring 前端 springboot Promise

Python逆向之 eval 函数解析,看着一篇就会了,案例掌房

梦想橡皮擦

Python 爬虫 8月月更

开源一夏 | 牛plus,多层嵌套动态JSON该如何解析总结

知识浅谈

开源 8月月更

【LeetCode】受限条件下可到达节点的数目Java题解

Albert

LeetCode 8月月更

面试突击72:输入URL之后会执行什么流程?

王磊

Java 面试

在SAP分析云里根据业务数据绘制词云(Word Cloud)

Jerry Wang

SaaS SAP 词云 8月月更 word-cloud

一文读懂配置管理(CM)

SEAL安全

企业安全 企业it安全 代码安全

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