diff --git a/dbus-sdr/sdrutils.cpp b/dbus-sdr/sdrutils.cpp
index 3e7b966..d148d9a 100644
--- a/dbus-sdr/sdrutils.cpp
+++ b/dbus-sdr/sdrutils.cpp
@@ -271,7 +271,6 @@
     }
     catch (const std::out_of_range& e)
     {
-        phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
         return invalidSensorNumber;
     }
 }
@@ -305,7 +304,6 @@
     }
     catch (const std::out_of_range& e)
     {
-        phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
         return std::string();
     }
 }
diff --git a/dbus-sdr/sensorcommands.cpp b/dbus-sdr/sensorcommands.cpp
index 55ba6d9..5d23a19 100644
--- a/dbus-sdr/sensorcommands.cpp
+++ b/dbus-sdr/sensorcommands.cpp
@@ -37,6 +37,7 @@
 #include <chrono>
 #include <cmath>
 #include <cstring>
+#include <format>
 #include <iostream>
 #include <map>
 #include <memory>
@@ -2512,6 +2513,7 @@
 
     auto& ipmiDecoratorPaths = getIpmiDecoratorPaths(ctx);
 
+    size_t invalidSensorNumberErrCount = 0;
     for (const auto& sensor : sensorTree)
     {
         const std::string& sensorObjPath = sensor.first;
@@ -2571,26 +2573,38 @@
                 if (entityInstanceValue == entityInstance)
                 {
                     auto recordId = getSensorNumberFromPath(sensorObjPath);
-                    if (recordId != invalidSensorNumber)
+                    if (recordId == invalidSensorNumber)
                     {
-                        sensorList.emplace_back(sensorObjPath, sensorTypeValue,
-                                                recordId, entityIdValue,
-                                                entityInstanceValue);
+                        ++invalidSensorNumberErrCount;
+                        continue;
                     }
-                }
-            }
-            else if (entityInstanceValue >= instanceStart)
-            {
-                auto recordId = getSensorNumberFromPath(sensorObjPath);
-                if (recordId != invalidSensorNumber)
-                {
                     sensorList.emplace_back(sensorObjPath, sensorTypeValue,
                                             recordId, entityIdValue,
                                             entityInstanceValue);
                 }
             }
+            else if (entityInstanceValue >= instanceStart)
+            {
+                auto recordId = getSensorNumberFromPath(sensorObjPath);
+                if (recordId == invalidSensorNumber)
+                {
+                    ++invalidSensorNumberErrCount;
+                    continue;
+                }
+                sensorList.emplace_back(sensorObjPath, sensorTypeValue,
+                                        recordId, entityIdValue,
+                                        entityInstanceValue);
+            }
         }
     }
+    if (invalidSensorNumberErrCount != 0)
+    {
+        phosphor::logging::log<phosphor::logging::level::ERR>(
+            std::format(
+                "getSensorNumberFromPath returned invalidSensorNumber {} times",
+                invalidSensorNumberErrCount)
+                .data());
+    }
 
     auto cmpFunc = [](sensorInfo first, sensorInfo second) {
         return first.entityInstance <= second.entityInstance;
