diff --git a/phosphor-regulators/src/chassis.cpp b/phosphor-regulators/src/chassis.cpp
index eb7f496..85e8275 100644
--- a/phosphor-regulators/src/chassis.cpp
+++ b/phosphor-regulators/src/chassis.cpp
@@ -16,7 +16,6 @@
 
 #include "chassis.hpp"
 
-#include "journal.hpp"
 #include "system.hpp"
 
 namespace phosphor::power::regulators
@@ -31,15 +30,16 @@
     }
 }
 
-void Chassis::closeDevices()
+void Chassis::closeDevices(Services& services)
 {
     // Log debug message in journal
-    journal::logDebug("Closing devices in chassis " + std::to_string(number));
+    services.getJournal().logDebug("Closing devices in chassis " +
+                                   std::to_string(number));
 
     // Close devices
     for (std::unique_ptr<Device>& device : devices)
     {
-        device->close();
+        device->close(services);
     }
 }
 
diff --git a/phosphor-regulators/src/chassis.hpp b/phosphor-regulators/src/chassis.hpp
index b61b79c..86d99f8 100644
--- a/phosphor-regulators/src/chassis.hpp
+++ b/phosphor-regulators/src/chassis.hpp
@@ -87,8 +87,10 @@
 
     /**
      * Close the devices within this chassis, if any.
+     *
+     * @param services system services like error logging and the journal
      */
-    void closeDevices();
+    void closeDevices(Services& services);
 
     /**
      * Configure the devices within this chassis, if any.
diff --git a/phosphor-regulators/src/device.cpp b/phosphor-regulators/src/device.cpp
index df73d1a..062ff27 100644
--- a/phosphor-regulators/src/device.cpp
+++ b/phosphor-regulators/src/device.cpp
@@ -18,7 +18,6 @@
 
 #include "chassis.hpp"
 #include "exception_utils.hpp"
-#include "journal.hpp"
 #include "system.hpp"
 
 #include <exception>
@@ -38,7 +37,7 @@
     }
 }
 
-void Device::close()
+void Device::close(Services& services)
 {
     try
     {
@@ -51,8 +50,8 @@
     catch (const std::exception& e)
     {
         // Log error messages in journal
-        exception_utils::log(e);
-        journal::logErr("Unable to close device " + id);
+        services.getJournal().logError(exception_utils::getMessages(e));
+        services.getJournal().logError("Unable to close device " + id);
 
         // TODO: Create error log entry
     }
diff --git a/phosphor-regulators/src/device.hpp b/phosphor-regulators/src/device.hpp
index d0466eb..ccdb30a 100644
--- a/phosphor-regulators/src/device.hpp
+++ b/phosphor-regulators/src/device.hpp
@@ -91,8 +91,10 @@
      *
      * Closes any interfaces that are open to this device.  Releases any other
      * operating system resources associated with this device.
+     *
+     * @param services system services like error logging and the journal
      */
-    void close();
+    void close(Services& services);
 
     /**
      * Configure this device.
diff --git a/phosphor-regulators/src/manager.cpp b/phosphor-regulators/src/manager.cpp
index bb0e3a8..1bffe24 100644
--- a/phosphor-regulators/src/manager.cpp
+++ b/phosphor-regulators/src/manager.cpp
@@ -123,7 +123,7 @@
             // normally disabled because the system is being powered off.  The
             // devices should be closed in case hardware is removed or replaced
             // while the system is at standby.
-            system->closeDevices();
+            system->closeDevices(services);
         }
     }
 }
diff --git a/phosphor-regulators/src/system.cpp b/phosphor-regulators/src/system.cpp
index 8f3412c..a032935 100644
--- a/phosphor-regulators/src/system.cpp
+++ b/phosphor-regulators/src/system.cpp
@@ -34,12 +34,12 @@
     }
 }
 
-void System::closeDevices()
+void System::closeDevices(Services& services)
 {
     // Close devices in each chassis
     for (std::unique_ptr<Chassis>& oneChassis : chassis)
     {
-        oneChassis->closeDevices();
+        oneChassis->closeDevices(services);
     }
 }
 
diff --git a/phosphor-regulators/src/system.hpp b/phosphor-regulators/src/system.hpp
index 16c4ee0..2ef14b8 100644
--- a/phosphor-regulators/src/system.hpp
+++ b/phosphor-regulators/src/system.hpp
@@ -62,8 +62,10 @@
 
     /**
      * Close the regulator devices in the system.
+     *
+     * @param services system services like error logging and the journal
      */
-    void closeDevices();
+    void closeDevices(Services& services);
 
     /**
      * Configure the regulator devices in the system.
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index 08304d3..3844ca4 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -19,7 +19,6 @@
 #include "device.hpp"
 #include "i2c_interface.hpp"
 #include "id_map.hpp"
-#include "journal.hpp"
 #include "mock_journal.hpp"
 #include "mock_services.hpp"
 #include "mocked_i2c_interface.hpp"
@@ -116,23 +115,27 @@
 {
     // Test where no devices were specified in constructor
     {
+        // Create mock services.  Expect logDebug() to be called.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Closing devices in chassis 2")).Times(1);
+
         // Create Chassis
         Chassis chassis{2};
 
         // Call closeDevices()
-        journal::clear();
-        chassis.closeDevices();
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
-        EXPECT_EQ(journal::getInfoMessages().size(), 0);
-        std::vector<std::string> expectedDebugMessages{
-            "Closing devices in chassis 2"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
+        chassis.closeDevices(services);
     }
 
     // Test where devices were specified in constructor
     {
         std::vector<std::unique_ptr<Device>> devices{};
 
+        // Create mock services.  Expect logDebug() to be called.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Closing devices in chassis 1")).Times(1);
+
         // Create Device vdd0_reg
         {
             // Create mock I2CInterface: isOpen() and close() should be called
@@ -167,13 +170,7 @@
         Chassis chassis{1, std::move(devices)};
 
         // Call closeDevices()
-        journal::clear();
-        chassis.closeDevices();
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
-        EXPECT_EQ(journal::getInfoMessages().size(), 0);
-        std::vector<std::string> expectedDebugMessages{
-            "Closing devices in chassis 1"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
+        chassis.closeDevices(services);
     }
 }
 
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index 62cf97e..19271d4 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -19,7 +19,6 @@
 #include "device.hpp"
 #include "i2c_interface.hpp"
 #include "id_map.hpp"
-#include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
 #include "mock_services.hpp"
@@ -154,14 +153,19 @@
         EXPECT_CALL(*i2cInterface, isOpen).Times(1).WillOnce(Return(false));
         EXPECT_CALL(*i2cInterface, close).Times(0);
 
+        // Create mock services.  No logError should occur.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
+        EXPECT_CALL(journal, logError(A<const std::vector<std::string>&>()))
+            .Times(0);
+
         // Create Device
         Device device{"vdd_reg", true, "/system/chassis/motherboard/reg2",
                       std::move(i2cInterface)};
 
         // Close Device
-        journal::clear();
-        device.close();
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
+        device.close(services);
     }
 
     // Test where works: I2C interface is open
@@ -172,14 +176,19 @@
         EXPECT_CALL(*i2cInterface, isOpen).Times(1).WillOnce(Return(true));
         EXPECT_CALL(*i2cInterface, close).Times(1);
 
+        // Create mock services.  No logError should occur.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
+        EXPECT_CALL(journal, logError(A<const std::vector<std::string>&>()))
+            .Times(0);
+
         // Create Device
         Device device{"vdd_reg", true, "/system/chassis/motherboard/reg2",
                       std::move(i2cInterface)};
 
         // Close Device
-        journal::clear();
-        device.close();
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
+        device.close(services);
     }
 
     // Test where fails: closing I2C interface fails
@@ -193,17 +202,21 @@
             .WillOnce(Throw(
                 i2c::I2CException{"Failed to close", "/dev/i2c-1", 0x70}));
 
+        // Create mock services.  Expect logError() to be called.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        std::vector<std::string> expectedErrMessagesException{
+            "I2CException: Failed to close: bus /dev/i2c-1, addr 0x70"};
+        EXPECT_CALL(journal, logError("Unable to close device vdd_reg"))
+            .Times(1);
+        EXPECT_CALL(journal, logError(expectedErrMessagesException)).Times(1);
+
         // Create Device
         Device device{"vdd_reg", true, "/system/chassis/motherboard/reg2",
                       std::move(i2cInterface)};
 
         // Close Device
-        journal::clear();
-        device.close();
-        std::vector<std::string> expectedErrMessages{
-            "I2CException: Failed to close: bus /dev/i2c-1, addr 0x70",
-            "Unable to close device vdd_reg"};
-        EXPECT_EQ(journal::getErrMessages(), expectedErrMessages);
+        device.close(services);
     }
 }
 
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index 5d1d720..809d2d4 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -71,6 +71,14 @@
     // Specify an empty rules vector
     std::vector<std::unique_ptr<Rule>> rules{};
 
+    // Create mock services.  Expect logDebug() to be called.
+    MockServices services{};
+    MockJournal& journal = services.getMockJournal();
+    EXPECT_CALL(journal, logDebug("Closing devices in chassis 1")).Times(1);
+    EXPECT_CALL(journal, logDebug("Closing devices in chassis 3")).Times(1);
+    EXPECT_CALL(journal, logInfo(A<const std::string&>())).Times(0);
+    EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
+
     // Create Chassis
     std::vector<std::unique_ptr<Chassis>> chassis{};
     chassis.emplace_back(std::make_unique<Chassis>(1));
@@ -80,13 +88,7 @@
     System system{std::move(rules), std::move(chassis)};
 
     // Call closeDevices()
-    journal::clear();
-    system.closeDevices();
-    EXPECT_EQ(journal::getErrMessages().size(), 0);
-    EXPECT_EQ(journal::getInfoMessages().size(), 0);
-    std::vector<std::string> expectedDebugMessages{
-        "Closing devices in chassis 1", "Closing devices in chassis 3"};
-    EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
+    system.closeDevices(services);
 }
 
 TEST(SystemTests, Configure)
