diff --git a/log_manager.cpp b/log_manager.cpp
index 5be474f..cf2a795 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -268,8 +268,29 @@
     return std::get<bool>(property);
 }
 
+bool Manager::isCalloutPresent(const Entry& entry)
+{
+    for (const auto& c : entry.additionalData())
+    {
+        if (c.find("CALLOUT_") != std::string::npos)
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+
 void Manager::checkQuiesceOnError(const Entry& entry)
 {
+
+    if (!isCalloutPresent(entry))
+    {
+        return;
+    }
+
+    logging::log<logging::level::INFO>(
+        "QuiesceOnError set and callout present");
     // TODO in later commit in this series
 }
 
diff --git a/log_manager.hpp b/log_manager.hpp
index a57f1ab..b24a7f3 100644
--- a/log_manager.hpp
+++ b/log_manager.hpp
@@ -183,6 +183,14 @@
      */
     void checkQuiesceOnError(const Entry& entry);
 
+    /** @brief Check if inventory callout present in input entry
+     *
+     * @param[in] entry - The error to check for callouts
+     *
+     * @return true if inventory item in associations, false otherwise
+     */
+    bool isCalloutPresent(const Entry& entry);
+
   private:
     /*
      * @fn _commit()
diff --git a/test/Makefile.am b/test/Makefile.am
index ddd42e6..8484d62 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -11,7 +11,8 @@
 	remote_logging_test_config \
 	sdjournal_mock_test \
 	extensions_test \
-	elog_update_ts_test
+	elog_update_ts_test \
+	elog_quiesce_test
 
 test_cppflags = \
 	-Igtest \
@@ -114,6 +115,14 @@
 elog_update_ts_test_LDFLAGS = \
 	$(test_ldflags)
 
+elog_quiesce_test_CPPFLAGS = $(test_cppflags)
+elog_quiesce_test_CXXFLAGS = $(test_cxxflags)
+elog_quiesce_test_SOURCES = elog_quiesce_test.cpp
+elog_quiesce_test_LDADD = $(test_ldadd)
+elog_quiesce_test_LDFLAGS = \
+	$(test_ldflags)
+
+
 # TODO Remove once the test-case failure is resolved openbmc/phosphor-logging#11
 XFAIL_TESTS = elog_errorwrap_test
 
diff --git a/test/elog_quiesce_test.cpp b/test/elog_quiesce_test.cpp
new file mode 100644
index 0000000..a29dc3e
--- /dev/null
+++ b/test/elog_quiesce_test.cpp
@@ -0,0 +1,83 @@
+#include "config.h"
+
+#include "elog_entry.hpp"
+#include "log_manager.hpp"
+
+#include <sdbusplus/bus.hpp>
+#include <sdbusplus/test/sdbus_mock.hpp>
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+namespace phosphor
+{
+namespace logging
+{
+namespace test
+{
+
+class TestQuiesceOnError : public testing::Test
+{
+  public:
+    sdbusplus::SdBusMock sdbusMock;
+    sdbusplus::bus::bus mockedBus = sdbusplus::get_mocked_new(&sdbusMock);
+    phosphor::logging::internal::Manager manager;
+
+    TestQuiesceOnError() : manager(mockedBus, OBJ_INTERNAL)
+    {
+    }
+};
+
+// Test that false is returned when no callout is present in the log
+TEST_F(TestQuiesceOnError, testNoCallout)
+{
+    uint32_t id = 99;
+    uint64_t timestamp{100};
+    std::string message{"test error"};
+    std::string fwLevel{"level42"};
+    std::vector<std::string> testData{"no", "callout"};
+    phosphor::logging::AssociationList associations{};
+
+    Entry elog{mockedBus,
+               std::string(OBJ_ENTRY) + '/' + std::to_string(id),
+               id,
+               timestamp,
+               Entry::Level::Informational,
+               std::move(message),
+               std::move(testData),
+               std::move(associations),
+               fwLevel,
+               manager};
+
+    EXPECT_EQ(manager.isCalloutPresent(elog), false);
+}
+
+// Test that trues is returned when a callout is present in the log
+TEST_F(TestQuiesceOnError, testCallout)
+{
+    uint32_t id = 99;
+    uint64_t timestamp{100};
+    std::string message{"test error"};
+    std::string fwLevel{"level42"};
+    std::vector<std::string> testData{
+        "CALLOUT_INVENTORY_PATH=/xyz/openbmc_project/inventory/system/chassis/"
+        "motherboard/powersupply0/"};
+    phosphor::logging::AssociationList associations{};
+
+    Entry elog{mockedBus,
+               std::string(OBJ_ENTRY) + '/' + std::to_string(id),
+               id,
+               timestamp,
+               Entry::Level::Informational,
+               std::move(message),
+               std::move(testData),
+               std::move(associations),
+               fwLevel,
+               manager};
+
+    EXPECT_EQ(manager.isCalloutPresent(elog), true);
+}
+
+} // namespace test
+} // namespace logging
+} // namespace phosphor
