NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Chronon 2.0 支持 Post Execution Logging

  • 2011-11-18
  • 本文字数:1461 字

    阅读完需:约 5 分钟

Chronon Systems 公司最近发布了 Chronon 2.0,这款记录 JVM 信息的调试器在 2.0 版本里支持 Post Execution Logging,即允许用户先执行、后记录日志。

Chronon 是个记录 JVM 信息的调试器,能监控生产环境里的系统、记录它们运行时的内部状态。然后,Chronon 可以重放应用流程,精准定位 Bug 的确切原因。InfoQ 先前也曾介绍过Chronon 的 Time Travelling 调试器

调试器的 2.0 版本支持 Post Execution Logging,这意味着程序员可以在应用运行之后再往代码里“插入”日志信息。由于 Chronon 并不会真正运行应用,只是简单地把应用从一种状态转换到另一种状态,所以和传统的日志记录相比,Post Execution Logging 有一个很大的好处,那就是结果是即时的。即使你的程序已经运行了五个小时,然后你在四小时之后才会执行到的某行里添加了一条日志记录语句,Chronon 也会立即把结果显示给你。而不用等到问题真正发生才去触发日志输出。

在运行中的 Java 应用里,日志级别是预先定义好的,也是有约束的。不过它们可以在运行时进行修改,甚至系统已经在生产环境里运行了,所有的改变只会影响后面的日志记录语句。如果在日志级别过高的时候出现了一个错误,那日志信息就不完整了。这迫使程序员在应用里添加更多的日志信息,以便最大限度地获取程序状态。应用在部署的时候通常都使用信息尽可能多的级别(比如 TRACE),随着应用的日渐成熟、程序员越来越有把握,程序员就会减少日志信息,把日志级别调高一些(比如 INFO)。

但这会严重影响生产效率,因为大型企业应用里的日志记录会带来明显影响。最坏的场景是,日志级别调高后(比如调到了 WARN)出现了一个严重错误,开发人员却基本看不出端倪或根本不知道发生了什么。在这种情况下,他们必须再次修改日志级别,并尝试重现生产系统里的错误,以便获取有意义的日志信息。

但使用 Post Execution Logging 的话,程序员不用把程序限定到特定的级别。在删除所有的日志信息后,这个概念可以发挥到极致,从而有较高的效率。

InfoQ 联系了 Chronon 的 CTO、创始人 Prashant Deva ,请他解释了一下 Chronon 的工作原理:

Chronon 能及时知道应用在任意时刻的整个状态,因为它在生产环境里做了记录。借助这些信息,Chronon 可以看到代码的任意方法或任意行,并告诉你执行它的准确时间。当你在某行放置了 Post Execution Logging 语句,Chronon 就知道了这一行被执行的所有时间,也能及时获取到程序在那个时刻的状态。通过这种方式,Chronon 可以计算出日志记录语句里那些变量或表达式的值。由于你可以把日志记录语句添加到代码的不同行里去,一旦 Chronon 得到各行里日志记录语句的结果,它就可以按时间对这些结果进行排序,你就能得到一份日志输出,其结果和执行真正存在日志语句的程序所得到的结果完全一样。

假如你在代码里真写了日志记录语句,Chronon 打印的内容基本上就是在这段特定的录制时间段内,这些日志记录语句的输出结果。这给程序员带来了极大的灵活性,因为他们可以在代码的任意位置添加日志记录语句,进而知道生产系统出问题后是否还需要额外的信息(较低的级别或较多的语句),而不用重新部署系统或重现问题。

Prashant 解释说:

这不是噱头。从“执行”的意义来说,你添加的日志记录语句就好象他们真的存在在代码里。举例来说,它们知道正在被哪个线程执行;如果你在一个“if”块的某一行添加了日志记录语句,调用这个方法十次会有五次去执行那行代码,那日志输出里也只会显示五条日志语句。

要想了解更多的 Chronon 相关细节,请移步官方 FAQ

查看英文原文: Chronon 2.0 Offers Post Execution Logging

2011-11-18 10:111037
用户头像

发布了 151 篇内容, 共 60.1 次阅读, 收获喜欢 18 次。

关注

评论

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

多家大厂CTO鼎力推荐的微服务架构设计模式真的硬核

小小怪下士

Java 程序员 微服务 后端

从「搭子」文化,看融云如何助力垂类社交应用增长

融云 RongCloud

融云 Z世代 通讯 交友 搭子

python统计程序耗时 | python小知识

AIWeker

Python python小知识 三周年连更

3月寒窗!啃透美团保姆级分布式进阶技术手册,4月终入美团定L8

Java你猿哥

Java 分布式 SSM框架 分布式数据 分布式消息

阿里全新推出:微服务突击手册,把所有操作都写出来了

Java你猿哥

微服务 微服务架构 Spring Cloud SSM框架

治理告警风暴,告警降噪的一些典型手段

龙渊秦五

告警风暴 告警降噪

阿里P7了!全靠死磕这份阿里全彩版"并发编程笔记",大厂必备!

Java你猿哥

Java 并发编程 架构师 java面试 Java工程师

中船互联与嘉为科技共同打造“IT运维管理”融合解决方案

嘉为蓝鲸

自动化运维 IT 运维 中船集团

把脉分布式事务的模型、协议和方案

小小怪下士

Java 分布式 分布式事务 后端

字节跳动正式开源分布式训练调度框架 Primus

字节跳动开源

开源 算法 流批一体

我在 20 年的软件工程师生涯中学到的 20 件事

宇宙之一粟

翻译 软技能

不懂就问,Milvus 新上线的资源组功能到底怎么样?

Zilliz

非结构化数据 Milvus Zilliz

多云转晴:Databend 的天空计算之路

Databend

Alibaba最新神作!耗时182天肝出来1015页分布式全栈手册太香了

Java你猿哥

Java 分布式 SSM框架 分布式核心原理解析 分布式开发

代码质量难评估?一文带你用 SonarQube 分析代码质量!

Java你猿哥

架构师 代码 SSM框架 sonar

Redis删除键命令: 新手用del,老手用unlink,有何区别?

Java你猿哥

Java redis SSM框架 Java工程师 delete

SpringBoot2.x系列教程——整合使用JPA

会踢球的程序源

Java

Flomesh 软负载 FLB GA 版本发布

Flomesh

负载均衡 云原生 Pipy

Spring Boot 实现接口幂等性的 4 种方案

做梦都在改BUG

Java Spring Boot

大型SRE组织设计与建设落地,且看腾讯蓝鲸如何做?

嘉为蓝鲸

腾讯 运维自动化 蓝鲸

改写同事代码——血压操作集锦第一弹

Java你猿哥

Java IDEA java编程 SSM框架 表单设计

揭秘云原生时代企业可观测体系落地实践

嘉为蓝鲸

云原生应用 云原生(Cloud Native) 可观测宇宙

【FAQ】关于华为推送服务因营销消息频次管控导致服务通讯类消息下发失败的解决方案

HMS Core

HMS Core

基于 Flink CDC 的现代数据栈实践

Apache Flink

大数据 flink 实时计算

互联网工程师Java面试题及答案整理(2023速成版,7天就能吃透)

采菊东篱下

java面试

90%的Java开发人员都会犯的5个错误

做梦都在改BUG

Oracle 23c 新特性实操体验优质文章汇总

墨天轮

数据库 oracle sql 新版本/特性解读

测试工程师为什么要关注研发效能?

思码逸研发效能

软件工程 研发效能 测试工程师

HummerRisk V1.0 :架构升级说明

HummerCloud

开源 云安全 云原生安全

Unity 之 月签到累计签到代码实现(ScriptableObject应用 | DoTween入场动画)

陈言必行

Unity 三周年连更

FastAPI 快速开发 Web API 项目: 连接 MySQL 数据库

宇宙之一粟

Python FastApi 三周年连更

Chronon 2.0支持Post Execution Logging_Java_Kostis Kapelonis_InfoQ精选文章