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)
