3

Java Flight Recorder provides simple APIs to detect if it's available (FlightRecorder.isAvailable()) or initialized (FlightRecorder.isInitialized()). But there's no obvious API to detect if it's actually recording. Maybe I could check FlightRecorder.getFlightRecorder().getRecordings().isEmpty(), but I'm not sure it would be accurate. Is there an obvious API I'm missing?

stiemannkj1
  • 4,418
  • 3
  • 25
  • 45

1 Answers1

2

To see if a recording is running, you must iterate all recordings and check their state.

I added the initialization check to prevent JFR to initialize when FlightRecorder.getFlightRecorder() is called.

public static boolean isRunning() {
  if (!FlightRecorder.isInitialized()) {
    return false;
  }
  for (Recording r : FlightRecorder.getFlightRecorder().getRecordings()) {
    if (r.getState() == RecordingState.RUNNING) {
      return true;
    }
  }
  return false;
}

If you want to detect when a recording starts, you can use the FlightRecorderListener.

FlightRecorder.addListener(new FlightRecorderListener() {
  @Override
  public void recordingStateChanged(Recording recording) {
    if (recording.getState() == RecordingState.RUNNING) {
      ...
    }
  }
});
Kire Haglin
  • 6,569
  • 22
  • 27