diff --git a/src/DeviceMgmt.cpp b/src/DeviceMgmt.cpp
index f36b68a..4c690ba 100644
--- a/src/DeviceMgmt.cpp
+++ b/src/DeviceMgmt.cpp
@@ -2,12 +2,13 @@
 
 #include "Utils.hpp"
 
+#include <phosphor-logging/lg2.hpp>
+
 #include <cstdint>
 #include <filesystem>
 #include <fstream>
 #include <iomanip>
 #include <ios>
-#include <iostream>
 #include <optional>
 #include <sstream>
 #include <stdexcept>
@@ -114,7 +115,7 @@
     std::ofstream ctor(ctorPath);
     if (!ctor.good())
     {
-        std::cerr << "Failed to open " << ctorPath << "\n";
+        lg2::error("Failed to open '{PATH}'", "PATH", ctorPath);
         return -1;
     }
 
@@ -122,7 +123,7 @@
     ctor.flush();
     if (!ctor.good())
     {
-        std::cerr << "Failed to write to " << ctorPath << "\n";
+        lg2::error("Failed to write to '{PATH}'", "PATH", ctorPath);
         return -1;
     }
 
@@ -147,7 +148,7 @@
     std::ofstream dtor(dtorPath);
     if (!dtor.good())
     {
-        std::cerr << "Failed to open " << dtorPath << "\n";
+        lg2::error("Failed to open '{PATH}'", "PATH", dtorPath);
         return -1;
     }
 
@@ -155,7 +156,7 @@
     dtor.flush();
     if (!dtor.good())
     {
-        std::cerr << "Failed to write to " << dtorPath << "\n";
+        lg2::error("Failed to write to '{PATH}'", "PATH", dtorPath);
         return -1;
     }
 
diff --git a/src/DeviceMgmt.hpp b/src/DeviceMgmt.hpp
index 5247486..09644ab 100644
--- a/src/DeviceMgmt.hpp
+++ b/src/DeviceMgmt.hpp
@@ -6,6 +6,7 @@
 
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/container/flat_map.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/bus/match.hpp>
 #include <sdbusplus/message.hpp>
@@ -13,7 +14,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <functional>
-#include <iostream>
 #include <memory>
 #include <optional>
 #include <stdexcept>
@@ -120,8 +120,8 @@
                 std::get_if<std::string>(&findSensorName->second);
             if (sensorName == nullptr)
             {
-                std::cerr << "Unable to find sensor name " << name
-                          << " on path " << path.str << "\n";
+                lg2::info("Unable to find '{NAME}' on '{PATH}'", "NAME", name,
+                          "PATH", path.str);
                 continue;
             }
 
@@ -157,8 +157,8 @@
                 // ensure that we end up with a fresh instance of it.
                 if (params->devicePresent())
                 {
-                    std::cerr << "Clearing out previous instance for "
-                              << path.str << "\n";
+                    lg2::info("Clearing out previous instance for '{PATH}'",
+                              "PATH", path.str);
                     I2CDevice tmp(*params);
                 }
 
@@ -171,9 +171,10 @@
                 }
                 catch (std::runtime_error&)
                 {
-                    std::cerr << "Failed to instantiate " << params->type->name
-                              << " at address " << params->address << " on bus "
-                              << params->bus << "\n";
+                    lg2::error(
+                        "Failed to instantiate '{NAME}' at address '{ADDR}' on bus '{BUS}'",
+                        "NAME", params->type->name, "ADDR", params->address,
+                        "BUS", params->bus);
                 }
             }
         }
diff --git a/src/FileHandle.cpp b/src/FileHandle.cpp
index 90bf64b..277a062 100644
--- a/src/FileHandle.cpp
+++ b/src/FileHandle.cpp
@@ -3,10 +3,11 @@
 #include <fcntl.h>
 #include <unistd.h>
 
+#include <phosphor-logging/lg2.hpp>
+
 #include <filesystem>
 #include <iostream>
 #include <stdexcept>
-#include <string>
 
 FileHandle::FileHandle(const std::filesystem::path& name,
                        std::ios_base::openmode mode) :
@@ -40,7 +41,7 @@
         int r = close(fd);
         if (r < 0)
         {
-            std::cerr << "Failed to close fd " << std::to_string(fd);
+            lg2::error("Failed to close fd: '{FD}'", "FD", fd);
         }
     }
 }
diff --git a/src/PwmSensor.cpp b/src/PwmSensor.cpp
index bffead9..646f0c6 100644
--- a/src/PwmSensor.cpp
+++ b/src/PwmSensor.cpp
@@ -20,13 +20,13 @@
 #include "Utils.hpp"
 #include "sensor.hpp"
 
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
 #include <cmath>
 #include <cstdint>
 #include <fstream>
-#include <iostream>
 #include <memory>
 #include <stdexcept>
 #include <string>
@@ -168,8 +168,7 @@
         valueMutabilityInterface->register_property("Mutable", true);
         if (!valueMutabilityInterface->initialize())
         {
-            std::cerr
-                << "error initializing sensor value mutability interface\n";
+            lg2::error("error initializing sensor value mutability interface");
             valueMutabilityInterface = nullptr;
         }
     }
@@ -212,13 +211,13 @@
     std::ifstream ref(sysPath);
     if (!ref.good())
     {
-        std::cerr << "Error opening " << sysPath << "\n";
+        lg2::error("Error opening '{PATH}'", "PATH", sysPath);
         return 0;
     }
     std::string line;
     if (!std::getline(ref, line))
     {
-        std::cerr << "Error reading pwm at " << sysPath << "\n";
+        lg2::error("Error reading pwm at '{PATH}'", "PATH", sysPath);
         return 0;
     }
     try
@@ -228,7 +227,7 @@
     }
     catch (const std::invalid_argument&)
     {
-        std::cerr << "Error converting pwm\n";
+        lg2::error("Error converting pwm");
         // throw if not initial read to be caught by dbus bindings
         if (errThrow)
         {
diff --git a/src/Thresholds.cpp b/src/Thresholds.cpp
index fc252ac..68233c0 100644
--- a/src/Thresholds.cpp
+++ b/src/Thresholds.cpp
@@ -8,6 +8,7 @@
 #include <boost/asio/error.hpp>
 #include <boost/asio/steady_timer.hpp>
 #include <boost/container/flat_map.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/exception.hpp>
@@ -17,7 +18,6 @@
 #include <chrono>
 #include <cstddef>
 #include <cstdint>
-#include <iostream>
 #include <limits>
 #include <memory>
 #include <string>
@@ -111,8 +111,9 @@
         if (valueFind == cfg.end() || severityFind == cfg.end() ||
             directionFind == cfg.end())
         {
-            std::cerr << "Malformed threshold on configuration interface "
-                      << intf << "\n";
+            lg2::error(
+                "Malformed threshold on configuration interface: '{INTERFACE}'",
+                "INTERFACE", intf);
             return false;
         }
         unsigned int severity =
@@ -158,7 +159,7 @@
                     auto labelFind = result.find("Label");
                     if (labelFind == result.end())
                     {
-                        std::cerr << "No label in threshold configuration\n";
+                        lg2::error("No label in threshold configuration");
                         return;
                     }
                     std::string label =
@@ -175,7 +176,7 @@
                 if (valueFind == result.end() || severityFind == result.end() ||
                     directionFind == result.end())
                 {
-                    std::cerr << "Malformed threshold in configuration\n";
+                    lg2::error("Malformed threshold in configuration");
                     return;
                 }
                 unsigned int severity = std::visit(
@@ -194,8 +195,9 @@
                     [](const boost::system::error_code& ec) {
                         if (ec)
                         {
-                            std::cerr
-                                << "Error setting threshold " << ec << "\n";
+                            lg2::error(
+                                "Error setting threshold: '{ERROR_MESSAGE}'",
+                                "ERROR_MESSAGE", ec.message());
                         }
                     },
                     entityManagerName, path, "org.freedesktop.DBus.Properties",
@@ -271,9 +273,11 @@
                 thresholdChanges.emplace_back(threshold, true, value);
                 if (++cHiTrue < assertLogCount)
                 {
-                    std::cerr << "Sensor " << sensor->name << " high threshold "
-                              << threshold.value << " assert: value " << value
-                              << " raw data " << sensor->rawValue << "\n";
+                    lg2::info(
+                        "Sensor name: {NAME}, high threshold: {THRESHOLD}, "
+                        "assert value: {VALUE}, raw data: {RAW_DATA}",
+                        "NAME", sensor->name, "THRESHOLD", threshold.value,
+                        "VALUE", value, "RAW_DATA", sensor->rawValue);
                 }
             }
             else if (value < (threshold.value - threshold.hysteresis))
@@ -293,10 +297,11 @@
                 thresholdChanges.emplace_back(threshold, true, value);
                 if (++cLoTrue < assertLogCount)
                 {
-                    std::cerr
-                        << "Sensor " << sensor->name << " low threshold "
-                        << threshold.value << " assert: value " << sensor->value
-                        << " raw data " << sensor->rawValue << "\n";
+                    lg2::info(
+                        "Sensor name: {NAME}, low threshold: {THRESHOLD}, "
+                        "assert value: {VALUE}, raw data: {RAW_DATA}",
+                        "NAME", sensor->name, "THRESHOLD", threshold.value,
+                        "VALUE", value, "RAW_DATA", sensor->rawValue);
                 }
             }
             else if (value > (threshold.value + threshold.hysteresis))
@@ -311,7 +316,7 @@
         }
         else
         {
-            std::cerr << "Error determining threshold direction\n";
+            lg2::error("Error determining threshold direction");
         }
     }
 
@@ -322,10 +327,12 @@
         cDebugThrottle = 0;
         if constexpr (debug)
         {
-            std::cerr << "checkThresholds: High T=" << cHiTrue
-                      << " F=" << cHiFalse << " M=" << cHiMidstate
-                      << ", Low T=" << cLoTrue << " F=" << cLoFalse
-                      << " M=" << cLoMidstate << "\n";
+            lg2::error("checkThresholds: High T= {HIGH_TRUE}, F= {HIGH_FALSE},"
+                       " M= {HIGH_MIDSTATE}, Low T= {LOW_TRUE}, F= {LOW_FALSE},"
+                       " M= {LOW_MIDSTATE}",
+                       "HIGH_TRUE", cHiTrue, "HIGH_FALSE", cHiFalse,
+                       "HIGH_MIDSTATE", cHiMidstate, "LOW_TRUE", cLoTrue,
+                       "LOW_FALSE", cLoFalse, "LOW_MIDSTATE", cLoMidstate);
         }
     }
 
@@ -374,7 +381,8 @@
         }
         if (ec)
         {
-            std::cerr << "timer error: " << ec.message() << "\n";
+            lg2::error("timer error: '{ERROR_MESSAGE}'", "ERROR_MESSAGE",
+                       ec.message());
             return;
         }
         if (sensorPtr->readingStateGood())
@@ -451,14 +459,14 @@
 
     if (!interface)
     {
-        std::cout << "trying to set uninitialized interface\n";
+        lg2::info("trying to set uninitialized interface");
         return;
     }
 
     std::string property = Sensor::propertyAlarm(level, direction);
     if (property.empty())
     {
-        std::cout << "Alarm property is empty \n";
+        lg2::info("Alarm property is empty");
         return;
     }
     if (interface->set_property<bool, true>(property, assert))
@@ -475,8 +483,8 @@
         }
         catch (const sdbusplus::exception_t& e)
         {
-            std::cerr
-                << "Failed to send thresholdAsserted signal with assertValue\n";
+            lg2::error(
+                "Failed to send thresholdAsserted signal with assertValue");
         }
     }
 }
@@ -522,8 +530,8 @@
                     *val += offset;
                     if (debug)
                     {
-                        std::cout << "Threshold: " << attrPath << ": " << *val
-                                  << "\n";
+                        lg2::info("Threshold: '{PATH}': '{VALUE}'", "PATH",
+                                  attrPath, "VALUE", *val);
                     }
                     thresholdVector.emplace_back(level, direction, *val,
                                                  hysteresis);
diff --git a/src/Utils.cpp b/src/Utils.cpp
index 2af6b50..202e394 100644
--- a/src/Utils.cpp
+++ b/src/Utils.cpp
@@ -24,6 +24,7 @@
 #include <boost/asio/error.hpp>
 #include <boost/asio/steady_timer.hpp>
 #include <boost/container/flat_map.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/bus.hpp>
@@ -40,7 +41,6 @@
 #include <filesystem>
 #include <fstream>
 #include <functional>
-#include <iostream>
 #include <iterator>
 #include <memory>
 #include <optional>
@@ -143,9 +143,9 @@
         }
         catch (const std::bad_variant_access& err)
         {
-            std::cerr << err.what()
-                      << ":PermitList does not contain a list, wrong "
-                         "variant type.\n";
+            lg2::error(
+                "'{ERROR_MESSAGE}': PermitList does not contain a list, wrong variant type.",
+                "ERROR_MESSAGE", err.what());
         }
     }
     return permitSet;
@@ -174,10 +174,12 @@
         }
         catch (const sdbusplus::exception_t& e)
         {
-            std::cerr << "While calling GetManagedObjects on service:"
-                      << entityManagerName << " exception name:" << e.name()
-                      << "and description:" << e.description()
-                      << " was thrown\n";
+            lg2::error(
+                "While calling GetManagedObjects on service: '{SERVICE_NAME}'"
+                " exception name: '{EXCEPTION_NAME}' and description: "
+                "'{EXCEPTION_DESCRIPTION}' was thrown",
+                "SERVICE_NAME", entityManagerName, "EXCEPTION_NAME", e.name(),
+                "EXCEPTION_DESCRIPTION", e.description());
             return false;
         }
     }
@@ -370,8 +372,8 @@
 
                 // we commonly come up before power control, we'll capture the
                 // property change later
-                std::cerr << "error getting power status " << ec.message()
-                          << "\n";
+                lg2::error("error getting power status: '{ERROR_MESSAGE}'",
+                           "ERROR_MESSAGE", ec.message());
                 return;
             }
             powerStatusOn = std::get<std::string>(state).ends_with(".Running");
@@ -402,8 +404,8 @@
                 }
                 // we commonly come up before power control, we'll capture the
                 // property change later
-                std::cerr << "error getting post status " << ec.message()
-                          << "\n";
+                lg2::error("error getting post status: '{ERROR_MESSAGE}'",
+                           "ERROR_MESSAGE", ec.message());
                 return;
             }
             const auto& value = std::get<std::string>(state);
@@ -438,8 +440,9 @@
 
                 // we commonly come up before power control, we'll capture the
                 // property change later
-                std::cerr << "error getting chassis power status "
-                          << ec.message() << "\n";
+                lg2::error(
+                    "error getting chassis power status: '{ERROR_MESSAGE}'",
+                    "ERROR_MESSAGE", ec.message());
                 return;
             }
             chassisStatusOn =
@@ -494,7 +497,8 @@
                         }
                         if (ec)
                         {
-                            std::cerr << "Timer error " << ec.message() << "\n";
+                            lg2::error("Timer error: '{ERROR_MESSAGE}'",
+                                       "ERROR_MESSAGE", ec.message());
                             return;
                         }
                         powerStatusOn = true;
@@ -558,7 +562,8 @@
                     }
                     if (ec)
                     {
-                        std::cerr << "Timer error " << ec.message() << "\n";
+                        lg2::error("Timer error: '{ERROR_MESSAGE}'",
+                                   "ERROR_MESSAGE", ec.message());
                         return;
                     }
                     chassisStatusOn = true;
@@ -785,8 +790,7 @@
                 auto itr = propertyList.find("SpecialMode");
                 if (itr == propertyList.end())
                 {
-                    std::cerr << "error getting  SpecialMode property "
-                              << "\n";
+                    lg2::error("error getting SpecialMode property");
                     return;
                 }
                 auto* manufacturingModeStatus =
@@ -822,8 +826,9 @@
            const std::variant<std::string>& getManufactMode) {
             if (ec)
             {
-                std::cerr << "error getting  SpecialMode status "
-                          << ec.message() << "\n";
+                lg2::error(
+                    "error getting SpecialMode status: '{ERROR_MESSAGE}'",
+                    "ERROR_MESSAGE", ec.message());
                 return;
             }
             const auto* manufacturingModeStatus =
diff --git a/src/Utils.hpp b/src/Utils.hpp
index be96877..8cfdddd 100644
--- a/src/Utils.hpp
+++ b/src/Utils.hpp
@@ -5,6 +5,7 @@
 #include <boost/algorithm/string/replace.hpp>
 #include <boost/asio/steady_timer.hpp>
 #include <boost/container/flat_map.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/bus/match.hpp>
@@ -19,7 +20,6 @@
 #include <cstdint>
 #include <filesystem>
 #include <functional>
-#include <iostream>
 #include <memory>
 #include <optional>
 #include <regex>
@@ -162,7 +162,7 @@
     auto it = data.find(key);
     if (it == data.end())
     {
-        std::cerr << "Configuration missing " << key << "\n";
+        lg2::error("Configuration missing '{KEY}'", "KEY", key);
         throw std::invalid_argument("Key Missing");
     }
     if constexpr (std::is_same_v<T, double>)
@@ -238,7 +238,7 @@
         [name](const boost::system::error_code ec) {
             if (ec)
             {
-                std::cerr << "Failed to set LED " << name << "\n";
+                lg2::error("Failed to set LED '{NAME}'", "NAME", name);
             }
         },
         "xyz.openbmc_project.LED.GroupManager",
@@ -277,12 +277,13 @@
                 {
                     if (retries == 0U)
                     {
-                        std::cerr << "Error getting " << path
-                                  << ": no retries left\n";
+                        lg2::error("Error getting '{PATH}': no retries left",
+                                   "PATH", path);
                         return;
                     }
-                    std::cerr << "Error getting " << path << ": " << retries - 1
-                              << " retries left\n";
+                    lg2::error(
+                        "Error getting '{PATH}': '{RETRIES}' retries left",
+                        "PATH", path, "RETRIES", retries - 1);
                     auto timer = std::make_shared<boost::asio::steady_timer>(
                         self->dbusConnection->get_io_context());
                     timer->expires_after(std::chrono::seconds(10));
@@ -290,7 +291,8 @@
                                        retries](boost::system::error_code ec) {
                         if (ec)
                         {
-                            std::cerr << "Timer error!\n";
+                            lg2::error("Timer error: '{ERROR_MESSAGE}'",
+                                       "ERROR_MESSAGE", ec.message());
                             return;
                         }
                         self->getPath(path, interface, owner, retries - 1);
@@ -324,7 +326,8 @@
                                         const GetSubTreeType& ret) {
                 if (ec)
                 {
-                    std::cerr << "Error calling mapper\n";
+                    lg2::error("Error calling mapper: '{ERROR_MESSAGE}'",
+                               "ERROR_MESSAGE", ec.message());
                     if (retries == 0U)
                     {
                         return;
@@ -336,7 +339,8 @@
                                        retries](boost::system::error_code ec) {
                         if (ec)
                         {
-                            std::cerr << "Timer error!\n";
+                            lg2::error("Timer error: '{ERROR_MESSAGE}'",
+                                       "ERROR_MESSAGE", ec.message());
                             return;
                         }
                         self->getConfiguration(interfaces, retries - 1);
@@ -401,7 +405,7 @@
     auto findHyphen = deviceName.find('-');
     if (findHyphen == std::string::npos)
     {
-        std::cerr << "found bad device " << deviceName << "\n";
+        lg2::error("found bad device '{NAME}'", "NAME", deviceName);
         return false;
     }
     std::string busStr = deviceName.substr(0, findHyphen);
@@ -411,13 +415,13 @@
     res = std::from_chars(&*busStr.begin(), &*busStr.end(), bus);
     if (res.ec != std::errc{} || res.ptr != &*busStr.end())
     {
-        std::cerr << "Error finding bus for " << deviceName << "\n";
+        lg2::error("Error finding bus for '{NAME}'", "NAME", deviceName);
         return false;
     }
     res = std::from_chars(&*addrStr.begin(), &*addrStr.end(), addr, 16);
     if (res.ec != std::errc{} || res.ptr != &*addrStr.end())
     {
-        std::cerr << "Error finding addr for " << deviceName << "\n";
+        lg2::error("Error finding addr for '{NAME}'", "NAME", deviceName);
         return false;
     }
 
diff --git a/src/sensor.hpp b/src/sensor.hpp
index 2eab853..07d70ec 100644
--- a/src/sensor.hpp
+++ b/src/sensor.hpp
@@ -6,6 +6,7 @@
 #include "Thresholds.hpp"
 #include "Utils.hpp"
 
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 #include <sdbusplus/exception.hpp>
@@ -16,7 +17,6 @@
 #include <cstddef>
 #include <cstdlib>
 #include <functional>
-#include <iostream>
 #include <limits>
 #include <memory>
 #include <string>
@@ -136,7 +136,7 @@
         size_t index = static_cast<size_t>(lev);
         if (index >= thresholdInterfaces.size())
         {
-            std::cout << "Unknown threshold level \n";
+            lg2::info("Unknown threshold level");
             return nullptr;
         }
         std::shared_ptr<sdbusplus::asio::dbus_interface> interface =
@@ -162,9 +162,10 @@
         // Show constants if first reading (even if unsuccessful)
         if ((inst.numCollectsGood == 0) && (inst.numCollectsMiss == 0))
         {
-            std::cerr << "Sensor " << name << ": Configuration min=" << minValue
-                      << ", max=" << maxValue << ", type=" << configInterface
-                      << ", path=" << configurationPath << "\n";
+            lg2::info(
+                "Sensor name: {NAME}, min: {MIN}, max: {MAX}, type: {TYPE}, path: {PATH}",
+                "NAME", name, "MIN", minValue, "MAX", maxValue, "TYPE",
+                configInterface, "PATH", configurationPath);
         }
 
         // Sensors can use "nan" to indicate unavailable reading
@@ -173,12 +174,12 @@
             // Only show this if beginning a new streak
             if (inst.numStreakMisses == 0)
             {
-                std::cerr << "Sensor " << name
-                          << ": Missing reading, Reading counts good="
-                          << inst.numCollectsGood
-                          << ", miss=" << inst.numCollectsMiss
-                          << ", Prior good streak=" << inst.numStreakGreats
-                          << "\n";
+                lg2::warning(
+                    "Sensor name: {NAME}, Missing reading, Reading counts good= {NUM_COLLECTS_GOOD},"
+                    " miss= {NUM_COLLECTS_MISS}, Prior good streak= {NUM_STREAK_GREATS}",
+                    "NAME", name, "NUM_COLLECTS_GOOD", inst.numCollectsGood,
+                    "NUM_COLLECTS_MISS", inst.numCollectsMiss,
+                    "NUM_STREAK_GREATS", inst.numStreakGreats);
             }
 
             inst.numStreakGreats = 0;
@@ -191,18 +192,19 @@
         // Only show this if beginning a new streak and not the first time
         if ((inst.numStreakGreats == 0) && (inst.numCollectsGood != 0))
         {
-            std::cerr << "Sensor " << name
-                      << ": Recovered reading, Reading counts good="
-                      << inst.numCollectsGood
-                      << ", miss=" << inst.numCollectsMiss
-                      << ", Prior miss streak=" << inst.numStreakMisses << "\n";
+            lg2::info(
+                "Sensor name: {NAME}, Recovered reading, Reading counts good= {NUM_COLLECTS_GOOD},"
+                " miss= {NUM_COLLECTS_MISS}, Prior good streak= {NUM_STREAK_GREATS}",
+                "NAME", name, "NUM_COLLECTS_GOOD", inst.numCollectsGood,
+                "NUM_COLLECTS_MISS", inst.numCollectsMiss, "NUM_STREAK_GREATS",
+                inst.numStreakGreats);
         }
 
         // Initialize min/max if the first successful reading
         if (inst.numCollectsGood == 0)
         {
-            std::cerr << "Sensor " << name << ": First reading=" << readValue
-                      << "\n";
+            lg2::info("Sensor name: {NAME}, First reading: {VALUE}", "NAME",
+                      name, "VALUE", readValue);
 
             inst.minCollected = readValue;
             inst.maxCollected = readValue;
@@ -215,16 +217,16 @@
         // Only provide subsequent output if new min/max established
         if (readValue < inst.minCollected)
         {
-            std::cerr << "Sensor " << name << ": Lowest reading=" << readValue
-                      << "\n";
+            lg2::info("Sensor name: {NAME}, Lowest reading: {VALUE}", "NAME",
+                      name, "VALUE", readValue);
 
             inst.minCollected = readValue;
         }
 
         if (readValue > inst.maxCollected)
         {
-            std::cerr << "Sensor " << name << ": Highest reading=" << readValue
-                      << "\n";
+            lg2::info("Sensor name: {NAME}, Highest reading: {VALUE}", "NAME",
+                      name, "VALUE", readValue);
 
             inst.maxCollected = readValue;
         }
@@ -293,7 +295,7 @@
 
             if (!iface)
             {
-                std::cout << "trying to set uninitialized interface\n";
+                lg2::info("trying to set uninitialized interface");
                 continue;
             }
 
@@ -331,7 +333,7 @@
         }
         if (!sensorInterface->initialize())
         {
-            std::cerr << "error initializing value interface\n";
+            lg2::error("error initializing value interface");
         }
 
         for (auto& thresIface : thresholdInterfaces)
@@ -340,7 +342,7 @@
             {
                 if (!thresIface->initialize(true))
                 {
-                    std::cerr << "Error initializing threshold interface \n";
+                    lg2::error("Error initializing threshold interface");
                 }
             }
         }
@@ -354,8 +356,8 @@
             valueMutabilityInterface->register_property("Mutable", true);
             if (!valueMutabilityInterface->initialize())
             {
-                std::cerr
-                    << "error initializing sensor value mutability interface\n";
+                lg2::error(
+                    "error initializing sensor value mutability interface");
                 valueMutabilityInterface = nullptr;
             }
         }
@@ -478,7 +480,7 @@
         errCount++;
         if (errCount == errorThreshold)
         {
-            std::cerr << "Sensor " << name << " reading error!\n";
+            lg2::error("Sensor name: {NAME}, reading error!", "NAME", name);
             markFunctional(false);
         }
     }
@@ -535,8 +537,8 @@
             if (interface &&
                 !(interface->set_property(dbusPropertyName, newValue)))
             {
-                std::cerr << "error setting property " << dbusPropertyName
-                          << " to " << newValue << "\n";
+                lg2::error("error setting property '{NAME}' to '{VALUE}'",
+                           "NAME", dbusPropertyName, "VALUE", newValue);
             }
         }
     }
diff --git a/src/tests/test_Utils.cpp b/src/tests/test_Utils.cpp
index 3db6727..957a9e9 100644
--- a/src/tests/test_Utils.cpp
+++ b/src/tests/test_Utils.cpp
@@ -1,12 +1,13 @@
 #include "Utils.hpp"
 
+#include <phosphor-logging/lg2.hpp>
+
 #include <array>
 #include <cstddef>
 #include <cstdint>
 #include <cstdlib>
 #include <filesystem>
 #include <fstream>
-#include <iostream>
 #include <new>
 #include <string>
 #include <vector>
@@ -78,7 +79,7 @@
              p != std::filesystem::recursive_directory_iterator(); ++p)
         {
             std::string path = p->path().string();
-            std::cerr << path << "\n";
+            lg2::info("{PATH}", "PATH", path);
             if (p.depth() >= 6)
             {
                 p.disable_recursion_pending();
