diff --git a/control/fanctl.cpp b/control/fanctl.cpp
index 6df14f0..6822b5d 100644
--- a/control/fanctl.cpp
+++ b/control/fanctl.cpp
@@ -531,7 +531,7 @@
     {
         SDBusPlus::callMethod(systemdService, systemdPath, systemdMgrIface,
                               "KillUnit", phosphorServiceName, "main", SIGUSR1);
-        std::cout << "FlightRecorder log written to: /tmp/fan_control.txt"
+        std::cout << "FlightRecorder log written to: /tmp/fan_control_dump.json"
                   << std::endl;
     }
     catch (const phosphor::fan::util::DBusPropertyError& e)
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 92ef0d0..10bb84d 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -58,6 +58,8 @@
     Manager::_objects;
 std::unordered_map<std::string, PropertyVariantType> Manager::_parameters;
 
+const std::string Manager::dumpFile = "/tmp/fan_control_dump.json";
+
 Manager::Manager(const sdeventplus::Event& event) :
     _bus(util::SDBusPlus::getBus()), _event(event),
     _mgr(util::SDBusPlus::getBus(), CONTROL_OBJPATH), _loadAllowed(true),
@@ -95,15 +97,26 @@
 void Manager::sigUsr1Handler(sdeventplus::source::Signal&,
                              const struct signalfd_siginfo*)
 {
-    _flightRecEventSource = std::make_unique<sdeventplus::source::Defer>(
-        _event, std::bind(std::mem_fn(&Manager::dumpFlightRecorder), this,
+    debugDumpEventSource = std::make_unique<sdeventplus::source::Defer>(
+        _event, std::bind(std::mem_fn(&Manager::dumpDebugData), this,
                           std::placeholders::_1));
 }
 
-void Manager::dumpFlightRecorder(sdeventplus::source::EventBase& /*source*/)
+void Manager::dumpDebugData(sdeventplus::source::EventBase& /*source*/)
 {
-    FlightRecorder::instance().dump();
-    _flightRecEventSource.reset();
+    json data;
+    FlightRecorder::instance().dump(data);
+
+    std::ofstream file{Manager::dumpFile};
+    if (!file)
+    {
+        log<level::ERR>("Could not open file for fan dump");
+        return;
+    }
+
+    file << std::setw(4) << data;
+
+    debugDumpEventSource.reset();
 }
 
 void Manager::load()
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 86e47dd..92f837e 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -479,6 +479,9 @@
         _parameters.erase(name);
     }
 
+    /* The name of the dump file */
+    static const std::string dumpFile;
+
   private:
     /* The sdbusplus bus object to use */
     sdbusplus::bus::bus& _bus;
@@ -525,9 +528,9 @@
     /* List of events configured */
     std::map<configKey, std::unique_ptr<Event>> _events;
 
-    /* The sdeventplus wrapper around sd_event_add_defer to dump the
-     * flight recorder from the event loop after the USR1 signal.  */
-    std::unique_ptr<sdeventplus::source::Defer> _flightRecEventSource;
+    /* The sdeventplus wrapper around sd_event_add_defer to dump debug
+     * data from the event loop after the USR1 signal.  */
+    std::unique_ptr<sdeventplus::source::Defer> debugDumpEventSource;
 
     /**
      * @brief A map of parameter names and values that are something
@@ -581,9 +584,9 @@
     void setProfiles();
 
     /**
-     * @brief Callback from _flightRecEventSource to dump the flight recorder
+     * @brief Callback from debugDumpEventSource to dump debug data
      */
-    void dumpFlightRecorder(sdeventplus::source::EventBase&);
+    void dumpDebugData(sdeventplus::source::EventBase&);
 };
 
 } // namespace phosphor::fan::control::json
diff --git a/control/json/utils/flight_recorder.cpp b/control/json/utils/flight_recorder.cpp
index 4cc274f..af04834 100644
--- a/control/json/utils/flight_recorder.cpp
+++ b/control/json/utils/flight_recorder.cpp
@@ -21,15 +21,15 @@
 
 #include <algorithm>
 #include <ctime>
-#include <fstream>
 #include <iomanip>
+#include <sstream>
 #include <vector>
 
 constexpr auto maxEntriesPerID = 20;
-constexpr auto outputFile = "/tmp/fan_control.txt";
 
 namespace phosphor::fan::control::json
 {
+using json = nlohmann::json;
 
 FlightRecorder& FlightRecorder::instance()
 {
@@ -51,7 +51,7 @@
     }
 }
 
-void FlightRecorder::dump()
+void FlightRecorder::dump(json& data)
 {
     using namespace std::chrono;
     using Timepoint = time_point<system_clock, microseconds>;
@@ -74,15 +74,6 @@
                   return std::get<Timepoint>(left) < std::get<Timepoint>(right);
               });
 
-    std::ofstream file{outputFile};
-
-    if (!file)
-    {
-        phosphor::logging::log<phosphor::logging::level::ERR>(
-            fmt::format("Could not open {} for writing", outputFile).c_str());
-        return;
-    }
-
     auto formatTime = [](const Timepoint& tp) {
         std::stringstream ss;
         std::time_t tt = system_clock::to_time_t(tp);
@@ -95,10 +86,14 @@
         return ss.str();
     };
 
+    auto& fr = data["flight_recorder"];
+    std::stringstream ss;
+
     for (const auto& [ts, id, msg] : output)
     {
-        file << formatTime(ts) << ": " << std::setw(idSize) << id << ": " << msg
-             << "\n";
+        ss << formatTime(ts) << ": " << std::setw(idSize) << id << ": " << msg;
+        fr.push_back(ss.str());
+        ss.str("");
     }
 }
 
diff --git a/control/json/utils/flight_recorder.hpp b/control/json/utils/flight_recorder.hpp
index 154d5ab..fcc3908 100644
--- a/control/json/utils/flight_recorder.hpp
+++ b/control/json/utils/flight_recorder.hpp
@@ -14,6 +14,8 @@
  * limitations under the License.
  */
 #pragma once
+#include <nlohmann/json.hpp>
+
 #include <chrono>
 #include <cstdint>
 #include <deque>
@@ -23,6 +25,7 @@
 
 namespace phosphor::fan::control::json
 {
+using json = nlohmann::json;
 
 /**
  * @class FlightRecorder
@@ -61,11 +64,13 @@
     void log(const std::string& id, const std::string& message);
 
     /**
-     * @brief Writes the flight recorder contents to file.
+     * @brief Writes the flight recorder contents to JSON.
      *
      * Sorts all messages by timestamp when doing so.
+     *
+     * @param[out] data - Filled in with the flight recorder data
      */
-    void dump();
+    void dump(json& data);
 
   private:
     FlightRecorder() = default;
diff --git a/control/main.cpp b/control/main.cpp
index ba9c612..5e81e99 100644
--- a/control/main.cpp
+++ b/control/main.cpp
@@ -31,9 +31,21 @@
 #include <sdeventplus/source/signal.hpp>
 #include <stdplus/signal.hpp>
 
+#include <fstream>
+
 using namespace phosphor::fan::control;
 using namespace phosphor::logging;
 
+#ifdef CONTROL_USE_JSON
+void dumpFlightRecorder()
+{
+    nlohmann::json data;
+    phosphor::fan::control::json::FlightRecorder::instance().dump(data);
+    std::ofstream file{json::Manager::dumpFile};
+    file << std::setw(4) << data;
+}
+#endif
+
 int main(int argc, char* argv[])
 {
     auto event = phosphor::fan::util::SDEventPlus::getEvent();
@@ -135,7 +147,7 @@
 #ifdef CONTROL_USE_JSON
         phosphor::fan::control::json::FlightRecorder::instance().log(
             "main", "Unexpected exception exit");
-        phosphor::fan::control::json::FlightRecorder::instance().dump();
+        dumpFlightRecorder();
 #endif
         throw;
     }
@@ -143,7 +155,7 @@
 #ifdef CONTROL_USE_JSON
     phosphor::fan::control::json::FlightRecorder::instance().log(
         "main", "Abnormal exit");
-    phosphor::fan::control::json::FlightRecorder::instance().dump();
+    dumpFlightRecorder();
 #endif
 
     return 1;
