diff --git a/delete_all.hpp b/delete_all.hpp
new file mode 100644
index 0000000..9cca2fd
--- /dev/null
+++ b/delete_all.hpp
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "interfaces.hpp"
+#include "manager.hpp"
+
+namespace ibm
+{
+namespace logging
+{
+
+/**
+ *  @class Delete
+ *
+ *  Implements the xyz.openbmc_project.Collect.DeleteAll interface
+ *  that will delete all ibm-logging entries.
+ */
+class DeleteAll : public DeleteAllObject
+{
+  public:
+    DeleteAll() = delete;
+    DeleteAll(const DeleteAll&) = delete;
+    DeleteAll& operator=(const DeleteAll&) = delete;
+    DeleteAll(DeleteAll&&) = default;
+    DeleteAll& operator=(DeleteAll&&) = default;
+    virtual ~DeleteAll() = default;
+
+    /**
+     * Constructor
+     *
+     * @param[in] bus - the D-Bus bus object
+     * @param[in] path - the object path
+     * @param[in] manager - the Manager object
+     */
+    DeleteAll(sdbusplus::bus::bus& bus, const std::string& path,
+              Manager& manager) :
+        DeleteAllObject(bus, path.c_str()),
+        manager(manager)
+    {
+    }
+
+    /**
+     * The Delete D-Bus method
+     */
+    inline void deleteAll() override
+    {
+        manager.eraseAll();
+    }
+
+  private:
+    /**
+     * The Manager object
+     */
+    Manager& manager;
+};
+}
+}
diff --git a/interfaces.hpp b/interfaces.hpp
index b889cbb..e5e8293 100644
--- a/interfaces.hpp
+++ b/interfaces.hpp
@@ -2,6 +2,7 @@
 
 #include <com/ibm/Logging/Policy/server.hpp>
 #include <xyz/openbmc_project/Object/Delete/server.hpp>
+#include <xyz/openbmc_project/Collection/DeleteAll/server.hpp>
 
 namespace ibm
 {
@@ -14,6 +15,10 @@
 using DeleteInterface = sdbusplus::xyz::openbmc_project::Object::server::Delete;
 using DeleteObject = ServerObject<DeleteInterface>;
 
+using DeleteAllInterface =
+    sdbusplus::xyz::openbmc_project::Collection::server::DeleteAll;
+using DeleteAllObject = ServerObject<DeleteAllInterface>;
+
 using PolicyInterface = sdbusplus::com::ibm::Logging::server::Policy;
 using PolicyObject = ServerObject<PolicyInterface>;
 
diff --git a/main.cpp b/main.cpp
index 5a2870d..7a65f09 100644
--- a/main.cpp
+++ b/main.cpp
@@ -15,6 +15,7 @@
  */
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/manager.hpp>
+#include "delete_all.hpp"
 #include "manager.hpp"
 #include "config.h"
 
@@ -25,6 +26,7 @@
     sdbusplus::server::manager::manager objManager(bus, LOGGING_PATH);
 
     ibm::logging::Manager manager{bus};
+    ibm::logging::DeleteAll da{bus, LOGGING_PATH, manager};
 
     bus.request_name(IBM_LOGGING_BUSNAME);
 
diff --git a/manager.cpp b/manager.cpp
index d47b3ad..45982fc 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -84,6 +84,11 @@
     }
 }
 
+void Manager::eraseAll()
+{
+    entries.clear();
+}
+
 void Manager::addInterface(const std::string& objectPath, InterfaceType type,
                            std::experimental::any& object)
 {
diff --git a/manager.hpp b/manager.hpp
index 69d9479..0320b0c 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -49,6 +49,11 @@
      */
     void erase(const std::string& objectPath);
 
+    /**
+     * Erases all entries
+     */
+    void eraseAll();
+
   private:
     /**
      * The callback for an interfaces added signal
