diff --git a/src/exit-air/ExitAirTempSensor.cpp b/src/exit-air/ExitAirTempSensor.cpp
index d4220dd..09613b1 100644
--- a/src/exit-air/ExitAirTempSensor.cpp
+++ b/src/exit-air/ExitAirTempSensor.cpp
@@ -62,8 +62,6 @@
 constexpr const char* cfmSettingPath = "/xyz/openbmc_project/control/cfm_limit";
 constexpr const char* cfmSettingIface = "xyz.openbmc_project.Control.CFMLimit";
 
-static constexpr bool debug = false;
-
 static constexpr double cfmMaxReading = 255;
 static constexpr double cfmMinReading = 0;
 
@@ -428,10 +426,7 @@
             [&](const auto& item) { return item.first.ends_with(tachName); });
         if (findReading == tachReadings.end())
         {
-            if constexpr (debug)
-            {
-                lg2::error("Can't find '{NAME}' in readings", "NAME", tachName);
-            }
+            lg2::debug("Can't find '{NAME}' in readings", "NAME", tachName);
             continue; // haven't gotten a reading
         }
 
@@ -456,10 +451,7 @@
         rpm /= findRange->second.second;
         rpm *= 100;
 
-        if constexpr (debug)
-        {
-            lg2::info("Tach '{NAME}' at '{RPM}'", "NAME", tachName, "RPM", rpm);
-        }
+        lg2::debug("Tach '{NAME}' at '{RPM}'", "NAME", tachName, "RPM", rpm);
 
         // Do a linear interpolation to get Ci
         // Ci = C1 + (C2 - C1)/(RPM2 - RPM1) * (TACHi - TACH1)
@@ -486,22 +478,16 @@
         // Now calculate the CFM for this tach
         // CFMi = Ci * Qmaxi * TACHi
         totalCFM += ci * maxCFM * rpm;
-        if constexpr (debug)
-        {
-            lg2::error(
-                "totalCFM = {CFM}, Ci = {CI}, MaxCFM = {MAXCFM}, rpm = {RPM}, c1 = {C1}"
-                ", c2 = {C2}, max = {MAX}, min = {MIN}",
-                "CFM", totalCFM, "CI", ci, "MAXCFM", maxCFM, "RPM", rpm, "C1",
-                c1, "C2", c2, "MAX", tachMaxPercent, "MIN", tachMinPercent);
-        }
+        lg2::debug(
+            "totalCFM = {CFM}, Ci = {CI}, MaxCFM = {MAXCFM}, rpm = {RPM}, c1 = {C1}"
+            ", c2 = {C2}, max = {MAX}, min = {MIN}",
+            "CFM", totalCFM, "CI", ci, "MAXCFM", maxCFM, "RPM", rpm, "C1", c1,
+            "C2", c2, "MAX", tachMaxPercent, "MIN", tachMinPercent);
     }
 
     // divide by 100 since rpm is in percent
     value = totalCFM / 100;
-    if constexpr (debug)
-    {
-        lg2::error("cfm value = {VALUE}", "VALUE", value);
-    }
+    lg2::debug("cfm value = {VALUE}", "VALUE", value);
     return true;
 }
 
@@ -637,11 +623,8 @@
                             }
                             double reading =
                                 std::visit(VariantToDoubleVisitor(), value);
-                            if constexpr (debug)
-                            {
-                                lg2::error("'{PATH}' reading '{VALUE}'", "PATH",
-                                           cbPath, "VALUE", reading);
-                            }
+                            lg2::debug("'{PATH}' reading '{VALUE}'", "PATH",
+                                       cbPath, "VALUE", reading);
                             self->powerReadings[cbPath] = reading;
                         },
                         matches[0].first, cbPath, properties::interface,
@@ -774,13 +757,10 @@
         return false;
     }
 
-    if constexpr (debug)
-    {
-        lg2::info(
-            "Power Factor: {POWER_FACTOR}, Inlet Temp: {INLET_TEMP}, Total Power: {TOTAL_POWER}",
-            "POWER_FACTOR", powerFactor, "INLET_TEMP", inletTemp, "TOTAL_POWER",
-            totalPower);
-    };
+    lg2::debug(
+        "Power Factor: {POWER_FACTOR}, Inlet Temp: {INLET_TEMP}, Total Power: {TOTAL_POWER}",
+        "POWER_FACTOR", powerFactor, "INLET_TEMP", inletTemp, "TOTAL_POWER",
+        totalPower);
 
     // Calculate the exit air temp
     // Texit = Tfp + (1.76 * TotalPower / CFM * Faltitude)
@@ -788,10 +768,7 @@
     reading /= cfm;
     reading += inletTemp;
 
-    if constexpr (debug)
-    {
-        lg2::info("Reading 1: '{VALUE}'", "VALUE", reading);
-    }
+    lg2::debug("Reading 1: '{VALUE}'", "VALUE", reading);
 
     // Now perform the exponential average
     // Calculate alpha based on SDR values and CFM
@@ -829,17 +806,11 @@
         alphaDT = 1.0;
     }
 
-    if constexpr (debug)
-    {
-        lg2::info("AlphaDT: '{ADT}'", "ADT", alphaDT);
-    }
+    lg2::debug("AlphaDT: '{ADT}'", "ADT", alphaDT);
 
     reading = ((reading * alphaDT) + (lastReading * (1.0 - alphaDT)));
 
-    if constexpr (debug)
-    {
-        lg2::info("Reading 2: '{VALUE}'", "VALUE", reading);
-    }
+    lg2::debug("Reading 2: '{VALUE}'", "VALUE", reading);
 
     val = reading;
     lastReading = reading;
