diff --git a/scwx-qt/source/scwx/qt/main/main_window.cpp b/scwx-qt/source/scwx/qt/main/main_window.cpp
index 490a0826..f8a4ef90 100644
--- a/scwx-qt/source/scwx/qt/main/main_window.cpp
+++ b/scwx-qt/source/scwx/qt/main/main_window.cpp
@@ -357,6 +357,11 @@ void MainWindow::on_actionImGuiDebug_triggered()
    p->imGuiDebugDialog_->show();
 }
 
+void MainWindow::on_actionDumpRadarProductRecords_triggered()
+{
+   manager::RadarProductManager::DumpRecords();
+}
+
 void MainWindow::on_actionUserManual_triggered()
 {
    QDesktopServices::openUrl(QUrl {"https://supercell-wx.readthedocs.io/"});
diff --git a/scwx-qt/source/scwx/qt/main/main_window.hpp b/scwx-qt/source/scwx/qt/main/main_window.hpp
index 0902c0e6..8b64a014 100644
--- a/scwx-qt/source/scwx/qt/main/main_window.hpp
+++ b/scwx-qt/source/scwx/qt/main/main_window.hpp
@@ -37,6 +37,7 @@ private slots:
    void on_actionSettings_triggered();
    void on_actionExit_triggered();
    void on_actionImGuiDebug_triggered();
+   void on_actionDumpRadarProductRecords_triggered();
    void on_actionUserManual_triggered();
    void on_actionDiscord_triggered();
    void on_actionGitHubRepository_triggered();
diff --git a/scwx-qt/source/scwx/qt/main/main_window.ui b/scwx-qt/source/scwx/qt/main/main_window.ui
index 7cf48f3c..77d45c5e 100644
--- a/scwx-qt/source/scwx/qt/main/main_window.ui
+++ b/scwx-qt/source/scwx/qt/main/main_window.ui
@@ -83,6 +83,8 @@
      &Debug
     
     
+    
+    
    
    
    
@@ -397,6 +399,11 @@
     &GitHub Repository
    
   
+  
+   
+    Dump Radar &Product Records
+   
+  
  
  
   
diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp
index 7cd70f37..33b12b58 100644
--- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp
+++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.cpp
@@ -54,8 +54,8 @@ static const std::string kDefaultLevel3Product_ {"N0B"};
 static constexpr std::chrono::seconds kRetryInterval_ {15};
 
 static std::unordered_map>
-                  instanceMap_;
-static std::mutex instanceMutex_;
+                         instanceMap_;
+static std::shared_mutex instanceMutex_;
 
 static std::unordered_map>
@@ -276,6 +276,58 @@ void RadarProductManager::Cleanup()
    }
 }
 
+void RadarProductManager::DumpRecords()
+{
+   scwx::util::async(
+      []
+      {
+         logger_->info("Record Dump");
+
+         std::shared_lock instanceLock {instanceMutex_};
+         for (auto& instance : instanceMap_)
+         {
+            auto radarProductManager = instance.second.lock();
+            if (radarProductManager != nullptr)
+            {
+               logger_->info(" {}", radarProductManager->radar_site()->id());
+               logger_->info("  Level 2");
+
+               {
+                  std::shared_lock level2ProductLock {
+                     radarProductManager->p->level2ProductRecordMutex_};
+
+                  for (auto& record :
+                       radarProductManager->p->level2ProductRecords_)
+                  {
+                     logger_->info("   {}",
+                                   scwx::util::TimeString(record.first));
+                  }
+               }
+
+               logger_->info("  Level 3");
+
+               {
+                  std::shared_lock level3ProductLock {
+                     radarProductManager->p->level3ProductRecordMutex_};
+
+                  for (auto& recordMap :
+                       radarProductManager->p->level3ProductRecordsMap_)
+                  {
+                     // Product Name
+                     logger_->info("   {}", recordMap.first);
+
+                     for (auto& record : recordMap.second)
+                     {
+                        logger_->info("    {}",
+                                      scwx::util::TimeString(record.first));
+                     }
+                  }
+               }
+            }
+         }
+      });
+}
+
 const std::vector&
 RadarProductManager::coordinates(common::RadialSize radialSize) const
 {
@@ -1030,7 +1082,7 @@ RadarProductManager::Instance(const std::string& radarSite)
    bool                                 instanceCreated = false;
 
    {
-      std::lock_guard guard(instanceMutex_);
+      std::unique_lock lock {instanceMutex_};
 
       // Look up instance weak pointer
       auto it = instanceMap_.find(radarSite);
diff --git a/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp b/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp
index cdce3a51..66984ed1 100644
--- a/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp
+++ b/scwx-qt/source/scwx/qt/manager/radar_product_manager.hpp
@@ -34,6 +34,11 @@ public:
 
    static void Cleanup();
 
+   /**
+    * @brief Debug function to dump currently loaded products to the log.
+    */
+   static void DumpRecords();
+
    const std::vector& coordinates(common::RadialSize radialSize) const;
    float                     gate_size() const;
    std::shared_ptr radar_site() const;