gpt4 book ai didi

Java Flight Recorder - 如何提取自定义事件字段的值?

转载 作者:行者123 更新时间:2023-12-01 13:37:09 26 4
gpt4 key购买 nike

Java Flight Recorder 现在是 OpenJDK 11 的一部分,并提供自定义事件的使用。
成功录制后,我想重用事件中的信息(尤其是我自己的自定义事件),但不知何故我无法读取事件的字段内容。
我只能看到字段的注释、名称和类型。
有谁知道这是否真的可能?
JFR 有一个 consumer package它允许您从文件中读取信息。我已经应用了一些功能。
我已经尝试过的
首先,我访问事件的所有字段:

event.getFields();
然后我遍历这些字段并以几种不同的方式访问它们的值:
a) eventField.getDescriptor();
b) eventField.getContentType();
光看他们的名字,显然他们都不会给我内容。不幸的是,我找不到任何可以提供帮助的功能。
我也试过
我还尝试了一个非常直接的想法:以调试方式阅读内容。我认为它会为我提供一些关于如何以编程方式提取这些信息的见解。
不幸的是,JFR 设法以一种方式对他们的录音进行编码,即在调试过程中,人们无法读取信息,直到以编程方式提取它们并将其作为局部变量(例如: map )。
供您引用,我一直在使用 this自定义事件实现的说明。

最佳答案

这是一个简短的程序,说明如何获取值

public class Example {
public static void main(String[] args) throws IOException {
if (args.length != 1) {
System.err.println("Must specify a recording file.");
return;
}

List<RecordedEvent> events = RecordingFile.readAllEvents(Path.of(args[0]));
for (RecordedEvent event : events) {
EventType eventType = event.getEventType();
String name = eventType.getName();
Instant start = event.getStartTime();
Instant end = event.getEndTime();
System.out.println(name + " " + start + " - " + end);
for (ValueDescriptor field : eventType.getFields()) {
String fieldName = field.getName();
Object value = event.getValue(fieldName);
System.out.println(fieldName + " = " + value);
}
System.out.println();
}
}
如果你想找到 JFR 各个方面的示例代码,你可以查看 test folder 在 OpenJDK 项目中。例如对 RecordedEvent 的测试

关于Java Flight Recorder - 如何提取自定义事件字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62831593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com