diff --git a/phosphor-regulators/src/chassis.cpp b/phosphor-regulators/src/chassis.cpp
index ebe446c..4a016e6 100644
--- a/phosphor-regulators/src/chassis.cpp
+++ b/phosphor-regulators/src/chassis.cpp
@@ -46,7 +46,8 @@
 void Chassis::configure(Services& services, System& system)
 {
     // Log info message in journal; important for verifying success of boot
-    journal::logInfo("Configuring chassis " + std::to_string(number));
+    services.getJournal().logInfo("Configuring chassis " +
+                                  std::to_string(number));
 
     // Configure devices
     for (std::unique_ptr<Device>& device : devices)
diff --git a/phosphor-regulators/src/configuration.cpp b/phosphor-regulators/src/configuration.cpp
index 8edc36c..81b2c17 100644
--- a/phosphor-regulators/src/configuration.cpp
+++ b/phosphor-regulators/src/configuration.cpp
@@ -21,7 +21,6 @@
 #include "chassis.hpp"
 #include "device.hpp"
 #include "exception_utils.hpp"
-#include "journal.hpp"
 #include "rail.hpp"
 #include "system.hpp"
 
@@ -42,7 +41,7 @@
     execute(services, system, chassis, device, rail.getID());
 }
 
-void Configuration::execute(Services& /*services*/, System& system,
+void Configuration::execute(Services& services, System& system,
                             Chassis& /*chassis*/, Device& device,
                             const std::string& deviceOrRailID)
 {
@@ -54,7 +53,7 @@
         {
             message += ": volts=" + std::to_string(volts.value());
         }
-        journal::logDebug(message);
+        services.getJournal().logDebug(message);
 
         // Create ActionEnvironment
         ActionEnvironment environment{system.getIDMap(), device.getID()};
@@ -69,8 +68,8 @@
     catch (const std::exception& e)
     {
         // Log error messages in journal
-        exception_utils::log(e);
-        journal::logErr("Unable to configure " + deviceOrRailID);
+        services.getJournal().logError(exception_utils::getMessages(e));
+        services.getJournal().logError("Unable to configure " + deviceOrRailID);
 
         // TODO: Create error log entry
     }
diff --git a/phosphor-regulators/test/chassis_tests.cpp b/phosphor-regulators/test/chassis_tests.cpp
index 481d71d..639dc33 100644
--- a/phosphor-regulators/test/chassis_tests.cpp
+++ b/phosphor-regulators/test/chassis_tests.cpp
@@ -181,8 +181,12 @@
 {
     // Test where no devices were specified in constructor
     {
-        // Create mock services.
+        // Create mock services.  Expect logInfo() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logInfo("Configuring chassis 1")).Times(1);
+        EXPECT_CALL(journal, logDebug(A<const std::string&>())).Times(0);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create Chassis
         std::unique_ptr<Chassis> chassis = std::make_unique<Chassis>(1);
@@ -195,21 +199,23 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Call configure()
-        journal::clear();
         chassisPtr->configure(services, system);
-        EXPECT_EQ(journal::getDebugMessages().size(), 0);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
-        std::vector<std::string> expectedInfoMessages{"Configuring chassis 1"};
-        EXPECT_EQ(journal::getInfoMessages(), expectedInfoMessages);
     }
 
     // Test where devices were specified in constructor
     {
-        // Create mock services.
-        MockServices services{};
-
         std::vector<std::unique_ptr<Device>> devices{};
 
+        // Create mock services.  Expect logInfo() and logDebug() to be called.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logInfo("Configuring chassis 2")).Times(1);
+        EXPECT_CALL(journal, logDebug("Configuring vdd0_reg: volts=1.300000"))
+            .Times(1);
+        EXPECT_CALL(journal, logDebug("Configuring vdd1_reg: volts=1.200000"))
+            .Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
+
         // Create Device vdd0_reg
         {
             // Create Configuration
@@ -258,15 +264,7 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Call configure()
-        journal::clear();
         chassisPtr->configure(services, system);
-        std::vector<std::string> expectedDebugMessages{
-            "Configuring vdd0_reg: volts=1.300000",
-            "Configuring vdd1_reg: volts=1.200000"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
-        std::vector<std::string> expectedInfoMessages{"Configuring chassis 2"};
-        EXPECT_EQ(journal::getInfoMessages(), expectedInfoMessages);
     }
 }
 
diff --git a/phosphor-regulators/test/configuration_tests.cpp b/phosphor-regulators/test/configuration_tests.cpp
index 93f1be8..260b638 100644
--- a/phosphor-regulators/test/configuration_tests.cpp
+++ b/phosphor-regulators/test/configuration_tests.cpp
@@ -19,7 +19,6 @@
 #include "device.hpp"
 #include "i2c_interface.hpp"
 #include "i2c_write_byte_action.hpp"
-#include "journal.hpp"
 #include "mock_action.hpp"
 #include "mock_journal.hpp"
 #include "mock_services.hpp"
@@ -43,6 +42,7 @@
 using namespace phosphor::power::regulators;
 using namespace phosphor::power::regulators::pmbus_utils;
 
+using ::testing::A;
 using ::testing::Return;
 using ::testing::Throw;
 using ::testing::TypedEq;
@@ -76,13 +76,16 @@
     }
 }
 
-// Test for execute(System&, Chassis&, Device&)
+// Test for execute(Services&, System&, Chassis&, Device&)
 TEST(ConfigurationTests, ExecuteForDevice)
 {
     // Test where works: Volts value not specified
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Configuring vdd_reg")).Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
@@ -126,17 +129,17 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Execute Configuration
-        journal::clear();
         configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
-        std::vector<std::string> expectedDebugMessages{"Configuring vdd_reg"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where works: Volts value specified
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Configuring vdd_reg: volts=1.300000"))
+            .Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create PMBusWriteVoutCommandAction.  Do not specify a volts value
         // because it will get a value of 1.3V from the
@@ -185,18 +188,21 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Execute Configuration
-        journal::clear();
         configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
-        std::vector<std::string> expectedDebugMessages{
-            "Configuring vdd_reg: volts=1.300000"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where fails
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() and logError() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        std::vector<std::string> expectedErrMessagesException{
+            "I2CException: Failed to write byte: bus /dev/i2c-1, addr 0x70",
+            "ActionError: i2c_write_byte: { register: 0x7C, value: 0xA, mask: "
+            "0xFF }"};
+        EXPECT_CALL(journal, logDebug("Configuring vdd_reg")).Times(1);
+        EXPECT_CALL(journal, logError(expectedErrMessagesException)).Times(1);
+        EXPECT_CALL(journal, logError("Unable to configure vdd_reg")).Times(1);
 
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
@@ -242,26 +248,20 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Execute Configuration
-        journal::clear();
         configurationPtr->execute(services, system, *chassisPtr, *devicePtr);
-        std::vector<std::string> expectedDebugMessages{"Configuring vdd_reg"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        std::vector<std::string> expectedErrMessages{
-            "I2CException: Failed to write byte: bus /dev/i2c-1, addr 0x70",
-            "ActionError: i2c_write_byte: { register: 0x7C, value: 0xA, mask: "
-            "0xFF }",
-            "Unable to configure vdd_reg"};
-        EXPECT_EQ(journal::getErrMessages(), expectedErrMessages);
     }
 }
 
-// Test for execute(System&, Chassis&, Device&, Rail&)
+// Test for execute(Services&, System&, Chassis&, Device&, Rail&)
 TEST(ConfigurationTests, ExecuteForRail)
 {
     // Test where works: Volts value not specified
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Configuring vio2")).Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
@@ -313,18 +313,18 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Execute Configuration
-        journal::clear();
         configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
                                   *railPtr);
-        std::vector<std::string> expectedDebugMessages{"Configuring vio2"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where works: Volts value specified
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Configuring vio2: volts=1.300000"))
+            .Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create PMBusWriteVoutCommandAction.  Do not specify a volts value
         // because it will get a value of 1.3V from the
@@ -381,19 +381,22 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Execute Configuration
-        journal::clear();
         configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
                                   *railPtr);
-        std::vector<std::string> expectedDebugMessages{
-            "Configuring vio2: volts=1.300000"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where fails
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() and logError() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        std::vector<std::string> expectedErrMessagesException{
+            "I2CException: Failed to write byte: bus /dev/i2c-1, addr 0x70",
+            "ActionError: i2c_write_byte: { register: 0x7C, value: 0xA, mask: "
+            "0xFF }"};
+        EXPECT_CALL(journal, logDebug("Configuring vio2")).Times(1);
+        EXPECT_CALL(journal, logError(expectedErrMessagesException)).Times(1);
+        EXPECT_CALL(journal, logError("Unable to configure vio2")).Times(1);
 
         // Create I2CWriteByteAction with register 0x7C and value 0x0A
         std::unique_ptr<I2CWriteByteAction> action =
@@ -447,17 +450,8 @@
         System system{std::move(rules), std::move(chassisVec)};
 
         // Execute Configuration
-        journal::clear();
         configurationPtr->execute(services, system, *chassisPtr, *devicePtr,
                                   *railPtr);
-        std::vector<std::string> expectedDebugMessages{"Configuring vio2"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        std::vector<std::string> expectedErrMessages{
-            "I2CException: Failed to write byte: bus /dev/i2c-1, addr 0x70",
-            "ActionError: i2c_write_byte: { register: 0x7C, value: 0xA, mask: "
-            "0xFF }",
-            "Unable to configure vio2"};
-        EXPECT_EQ(journal::getErrMessages(), expectedErrMessages);
     }
 }
 
diff --git a/phosphor-regulators/test/device_tests.cpp b/phosphor-regulators/test/device_tests.cpp
index 47768e2..690a510 100644
--- a/phosphor-regulators/test/device_tests.cpp
+++ b/phosphor-regulators/test/device_tests.cpp
@@ -211,8 +211,11 @@
 {
     // Test where Configuration and Rails were not specified in constructor
     {
-        // Create mock services.
+        // Create mock services.  No logging should occur.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug(A<const std::string&>())).Times(0);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create Device
         std::unique_ptr<i2c::I2CInterface> i2cInterface = createI2CInterface();
@@ -234,20 +237,26 @@
         chassisVec.emplace_back(std::move(chassis));
         System system{std::move(rules), std::move(chassisVec)};
 
-        // Call configure().  Should do nothing.
-        journal::clear();
+        // Call configure().
         devicePtr->configure(services, system, *chassisPtr);
-        EXPECT_EQ(journal::getDebugMessages().size(), 0);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where Configuration and Rails were specified in constructor
     {
-        // Create mock services.
-        MockServices services{};
-
         std::vector<std::unique_ptr<Rail>> rails{};
 
+        // Create mock services.  Expect logDebug() to be called.
+        // For the Device and both Rails, should execute the Configuration
+        // and log a debug message.
+        MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Configuring reg1")).Times(1);
+        EXPECT_CALL(journal, logDebug("Configuring vdd0: volts=1.300000"))
+            .Times(1);
+        EXPECT_CALL(journal, logDebug("Configuring vio0: volts=3.200000"))
+            .Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
+
         // Create Rail vdd0
         {
             // Create Configuration for Rail
@@ -313,15 +322,8 @@
         chassisVec.emplace_back(std::move(chassis));
         System system{std::move(rules), std::move(chassisVec)};
 
-        // Call configure().  For the Device and both Rails, should execute the
-        // Configuration and log a debug message.
-        journal::clear();
+        // Call configure().
         devicePtr->configure(services, system, *chassisPtr);
-        std::vector<std::string> expectedDebugMessages{
-            "Configuring reg1", "Configuring vdd0: volts=1.300000",
-            "Configuring vio0: volts=3.200000"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 }
 
diff --git a/phosphor-regulators/test/rail_tests.cpp b/phosphor-regulators/test/rail_tests.cpp
index d8524dc..190e48e 100644
--- a/phosphor-regulators/test/rail_tests.cpp
+++ b/phosphor-regulators/test/rail_tests.cpp
@@ -87,8 +87,11 @@
 {
     // Test where Configuration was not specified in constructor
     {
-        // Create mock services.
+        // Create mock services.  No logging should occur.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug(A<const std::string&>())).Times(0);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create Rail
         std::unique_ptr<Rail> rail = std::make_unique<Rail>("vdd0");
@@ -120,17 +123,18 @@
         chassisVec.emplace_back(std::move(chassis));
         System system{std::move(rules), std::move(chassisVec)};
 
-        // Call configure().  Should do nothing.
-        journal::clear();
+        // Call configure().
         railPtr->configure(services, system, *chassisPtr, *devicePtr);
-        EXPECT_EQ(journal::getDebugMessages().size(), 0);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 
     // Test where Configuration was specified in constructor
     {
-        // Create mock services.
+        // Create mock services.  Expect logDebug() to be called.
         MockServices services{};
+        MockJournal& journal = services.getMockJournal();
+        EXPECT_CALL(journal, logDebug("Configuring vddr1: volts=1.300000"))
+            .Times(1);
+        EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
         // Create Configuration
         std::optional<double> volts{1.3};
@@ -172,14 +176,8 @@
         chassisVec.emplace_back(std::move(chassis));
         System system{std::move(rules), std::move(chassisVec)};
 
-        // Call configure().  Should execute Configuration and log debug message
-        // to journal.
-        journal::clear();
+        // Call configure().
         railPtr->configure(services, system, *chassisPtr, *devicePtr);
-        std::vector<std::string> expectedDebugMessages{
-            "Configuring vddr1: volts=1.300000"};
-        EXPECT_EQ(journal::getDebugMessages(), expectedDebugMessages);
-        EXPECT_EQ(journal::getErrMessages().size(), 0);
     }
 }
 
diff --git a/phosphor-regulators/test/system_tests.cpp b/phosphor-regulators/test/system_tests.cpp
index daa2084..7adc5d8 100644
--- a/phosphor-regulators/test/system_tests.cpp
+++ b/phosphor-regulators/test/system_tests.cpp
@@ -23,6 +23,7 @@
 #include "pmbus_read_sensor_action.hpp"
 #include "rail.hpp"
 #include "rule.hpp"
+#include "services.hpp"
 #include "system.hpp"
 #include "test_utils.hpp"
 
@@ -91,8 +92,13 @@
 
 TEST(SystemTests, Configure)
 {
-    // Create mock services.
+    // Create mock services.  Expect logInfo() to be called.
     MockServices services{};
+    MockJournal& journal = services.getMockJournal();
+    EXPECT_CALL(journal, logInfo("Configuring chassis 1")).Times(1);
+    EXPECT_CALL(journal, logInfo("Configuring chassis 3")).Times(1);
+    EXPECT_CALL(journal, logDebug(A<const std::string&>())).Times(0);
+    EXPECT_CALL(journal, logError(A<const std::string&>())).Times(0);
 
     // Specify an empty rules vector
     std::vector<std::unique_ptr<Rule>> rules{};
@@ -106,13 +112,7 @@
     System system{std::move(rules), std::move(chassis)};
 
     // Call configure()
-    journal::clear();
     system.configure(services);
-    EXPECT_EQ(journal::getDebugMessages().size(), 0);
-    EXPECT_EQ(journal::getErrMessages().size(), 0);
-    std::vector<std::string> expectedInfoMessages{"Configuring chassis 1",
-                                                  "Configuring chassis 3"};
-    EXPECT_EQ(journal::getInfoMessages(), expectedInfoMessages);
 }
 
 TEST(SystemTests, GetChassis)
