写点什么

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

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

关注

评论

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

基础设施SIG月度动态:社区官网 SIG 增加轻量级 PR 支持,CVECenter 上线漏洞认领功能

OpenAnolis小助手

龙蜥社区 龙蜥社区SIG 月度动态

英特尔助力龙蜥加速 AI 应用及 LLM 性能

OpenAnolis小助手

AI 英特尔 龙蜥社区 2023龙蜥操作系统大会

PMO 总监干货分享:Jira Cloud 驱动项目管理创新

跟YY哥学Jira

项目管理 Jira Cloud PMO 协作

C++ 编程入门指南:深入了解 C++ 语言及其应用领域

小万哥

程序人生 编程语言 软件工程 C/C++ 后端开发

院士专家任高级顾问,龙蜥生态日见成熟

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区

15 万奖金!开放原子开源大赛 OpenAnolis -云原生赛题报名开始

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区 龙蜥赛题

云原生时代下,操作系统生态的挑战与机遇

OpenAnolis小助手

云原生 操作系统 国产操作系统 龙蜥社区 2023龙蜥操作系统大会

【专访浪潮信息】构建开放公平的社区生态,中国服务器操作系统崛起进行时

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区 浪潮信息 2023龙蜥操作系统大会

释放硬件潜能,激活软件生态 《龙蜥+超级探访》第二期走进 Intel

OpenAnolis小助手

操作系统 国产操作系统 英特尔 龙蜥社区 龙蜥+超级探访

2023年回顾| 龙蜥这一年:群擎并举,众芯共魂

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区

重构大面积if-else代码

廊虞

Java 设计模式 策略模式

高性能网络SIG月度动态:virtio 支持 RSS 功能!virtio 标准委员会正式接受 SIG 提案

OpenAnolis小助手

龙蜥 龙蜥社区SIG 月度动态

根基已筑!Anolis OS 23.1 预览版本搭载 Linux 6.6 内核和工具链升级完成

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区 龙蜥产品发布 Anolis OS

开始报名,赢取丰厚奖金!2024 大学生操作系统赛—龙蜥赛题等你来挑战

OpenAnolis小助手

龙蜥赛题

金智维的务实主义,打响大模型落地“突围战”

脑极体

AI

龙蜥社区荣获 OSCHINA “2023 年度优秀开源技术团队”

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区

叫好不叫座?Arm、英特尔、AMD 等 5 位技术大咖畅聊机密计算技术

OpenAnolis小助手

龙蜥社区 龙蜥操作系统 机密计算 2023龙蜥操作系统大会

【专访阿里云】云智融合转型期,国产服务器操作系统路在何方?

OpenAnolis小助手

阿里云 操作系统 国产操作系统 龙蜥社区

【专访英特尔】软硬结合,共赴服务器操作系统的云智未来

OpenAnolis小助手

AI 操作系统 国产操作系统 intel 龙蜥社区

[每日秒懂] 持续交付2.0

dinstone

持续交付 双环模型 科学探索-快速验证

一文读懂Partisia区块链的MOCCA 方案:让资产管理可信且可编程

加密眼界

Alibaba Cloud Linux 与倚天软硬结合,加速数据智能创新

OpenAnolis小助手

AI 龙蜥社区 Alibaba Cloud Linux

Anolis OS 获 Gitee 最有价值开源项目称号

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区

SysOM 的可观测和智能监控实践

OpenAnolis小助手

系统运维 龙蜥社区 龙蜥操作系统 SysOM 2023龙蜥操作系统大会

LC串联谐振拓扑仿真建模

芯动大师

控制 电源 LC电路

龙蜥开发者说:一个人出发,一群人抵达 | 第 26 期

OpenAnolis小助手

龙蜥社区 龙蜥开发者说

群擎并举,众芯共魂,龙蜥重磅首发下一代操作系统“1+3”能力模型

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区 2023龙蜥操作系统大会

龙蜥社区正式推出驱动基线 V1.0,打造更加稳定、高效的生态系统

OpenAnolis小助手

操作系统 国产操作系统 龙蜥社区

Sora小白教程一文通,如何使用Sora?

蓉蓉

openai sora

龙蜥社区衍生版浪潮信息 KOS 升级!支持最新 5.10 内核,让大模型“开箱即用”

OpenAnolis小助手

龙蜥操作系统 龙蜥社区衍生版

linux中安装nodejs,卸载nodejs,更新nodejs,git

百度搜索:蓝易云

git Linux 运维 Node 云服务器

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