diff --git a/extensions/openpower-pels/registry/message_registry.json b/extensions/openpower-pels/registry/message_registry.json
index bd79c2e..cbcb8d2 100644
--- a/extensions/openpower-pels/registry/message_registry.json
+++ b/extensions/openpower-pels/registry/message_registry.json
@@ -552,7 +552,7 @@
         },
 
         {
-            "Name": "xyz.openbmc_project.Logging.Error.LogsCleared",
+            "Name": "xyz.openbmc_project.Logging.Cleared",
             "Subsystem": "bmc_firmware",
             "Severity": "non_error",
 
@@ -561,7 +561,7 @@
                 "Words6To9": {
                     "6": {
                         "Description": "Number of logs deleted",
-                        "AdditionalDataPropSource": "NUM_LOGS"
+                        "AdditionalDataPropSource": "NUMBER_OF_LOGS"
                     }
                 }
             },
diff --git a/gen/xyz/openbmc_project/Logging/meson.build b/gen/xyz/openbmc_project/Logging/meson.build
index c27f679..6421d35 100644
--- a/gen/xyz/openbmc_project/Logging/meson.build
+++ b/gen/xyz/openbmc_project/Logging/meson.build
@@ -1,16 +1,2 @@
 # Generated file; do not modify.
-generated_sources += custom_target(
-    'xyz/openbmc_project/Logging__cpp'.underscorify(),
-    input: [ '../../../../yaml/xyz/openbmc_project/Logging.errors.yaml',  ],
-    output: [ 'error.cpp', 'error.hpp',  ],
-    depend_files: sdbusplusplus_depfiles,
-    command: [
-        sdbuspp_gen_meson_prog, '--command', 'cpp',
-        '--output', meson.current_build_dir(),
-        '--tool', sdbusplusplus_prog,
-        '--directory', meson.current_source_dir() / '../../../../yaml',
-        'xyz/openbmc_project/Logging',
-    ],
-)
-
 subdir('Internal')
diff --git a/gen/xyz/openbmc_project/meson.build b/gen/xyz/openbmc_project/meson.build
index 1e56539..1b45c9d 100644
--- a/gen/xyz/openbmc_project/meson.build
+++ b/gen/xyz/openbmc_project/meson.build
@@ -1,16 +1,2 @@
 # Generated file; do not modify.
 subdir('Logging')
-generated_others += custom_target(
-    'xyz/openbmc_project/Logging__markdown'.underscorify(),
-    input: [ '../../../yaml/xyz/openbmc_project/Logging.errors.yaml',  ],
-    output: [ 'Logging.md' ],
-    depend_files: sdbusplusplus_depfiles,
-    command: [
-        sdbuspp_gen_meson_prog, '--command', 'markdown',
-        '--output', meson.current_build_dir(),
-        '--tool', sdbusplusplus_prog,
-        '--directory', meson.current_source_dir() / '../../../yaml',
-        'xyz/openbmc_project/Logging',
-    ],
-)
-
diff --git a/lib/lg2_commit.cpp b/lib/lg2_commit.cpp
index 4d75594..6f11a4c 100644
--- a/lib/lg2_commit.cpp
+++ b/lib/lg2_commit.cpp
@@ -1,3 +1,5 @@
+#include "lg2_commit.hpp"
+
 #include <sys/syslog.h>
 
 #include <nlohmann/json.hpp>
@@ -117,4 +119,19 @@
                 data_from_json(t));
 }
 
+auto extractEvent(sdbusplus::exception::generated_event_base&& t)
+    -> std::tuple<std::string, Entry::Level, std::vector<std::string>>
+{
+    auto data = data_from_json(t);
+    std::vector<std::string> additional_data = {};
+
+    for (auto& [key, data] : data)
+    {
+        additional_data.emplace_back(key + "=" + data);
+    }
+
+    return {t.name(), severity_from_syslog(t.severity()),
+            std::move(additional_data)};
+}
+
 } // namespace lg2::details
diff --git a/lib/lg2_commit.hpp b/lib/lg2_commit.hpp
new file mode 100644
index 0000000..db6bab0
--- /dev/null
+++ b/lib/lg2_commit.hpp
@@ -0,0 +1,22 @@
+#pragma once
+#include <sdbusplus/exception.hpp>
+#include <xyz/openbmc_project/Logging/Entry/client.hpp>
+
+#include <string>
+#include <tuple>
+#include <vector>
+
+namespace lg2::details
+{
+
+using Entry = sdbusplus::client::xyz::openbmc_project::logging::Entry<>;
+
+/** Extract the message, level, and additional data from agenerated event.
+ *
+ *  @param[in] The event to extract data from.
+ *  @return A tuple containing the message, level, and additional data.
+ */
+auto extractEvent(sdbusplus::exception::generated_event_base&&)
+    -> std::tuple<std::string, Entry::Level, std::vector<std::string>>;
+
+} // namespace lg2::details
diff --git a/log_manager.cpp b/log_manager.cpp
index 1b0cf3f..de3509d 100644
--- a/log_manager.cpp
+++ b/log_manager.cpp
@@ -6,6 +6,7 @@
 #include "elog_meta.hpp"
 #include "elog_serialize.hpp"
 #include "extensions.hpp"
+#include "lib/lg2_commit.hpp"
 #include "paths.hpp"
 #include "util.hpp"
 
@@ -259,6 +260,13 @@
     return objPath;
 }
 
+auto Manager::createFromEvent(sdbusplus::exception::generated_event_base&&
+                                  event) -> sdbusplus::message::object_path
+{
+    auto [msg, level, data] = lg2::details::extractEvent(std::move(event));
+    return this->createEntry(msg, level, std::move(data));
+}
+
 bool Manager::isQuiesceOnErrorEnabled()
 {
     // When running under tests, the Logging.Settings service will not be
diff --git a/log_manager.hpp b/log_manager.hpp
index cd5ae1d..2535832 100644
--- a/log_manager.hpp
+++ b/log_manager.hpp
@@ -2,14 +2,14 @@
 
 #include "elog_block.hpp"
 #include "elog_entry.hpp"
-#include "xyz/openbmc_project/Collection/DeleteAll/server.hpp"
-#include "xyz/openbmc_project/Logging/Create/server.hpp"
-#include "xyz/openbmc_project/Logging/Entry/server.hpp"
 #include "xyz/openbmc_project/Logging/Internal/Manager/server.hpp"
-#include "xyz/openbmc_project/Logging/error.hpp"
 
 #include <phosphor-logging/log.hpp>
 #include <sdbusplus/bus.hpp>
+#include <xyz/openbmc_project/Collection/DeleteAll/server.hpp>
+#include <xyz/openbmc_project/Logging/Create/server.hpp>
+#include <xyz/openbmc_project/Logging/Entry/server.hpp>
+#include <xyz/openbmc_project/Logging/event.hpp>
 
 #include <list>
 
@@ -26,8 +26,7 @@
     sdbusplus::server::xyz::openbmc_project::collection::DeleteAll;
 
 using Severity = sdbusplus::xyz::openbmc_project::Logging::server::Entry::Level;
-using LogsCleared =
-    sdbusplus::xyz::openbmc_project::Logging::Error::LogsCleared;
+using LoggingCleared = sdbusplus::event::xyz::openbmc_project::Logging::Cleared;
 
 namespace details
 {
@@ -187,6 +186,13 @@
                 const FFDCEntries& ffdc = FFDCEntries{})
         -> sdbusplus::message::object_path;
 
+    /** @brief Create an internal event log from the sdbusplus generated event
+     *
+     *  @param[in] event - The event to create.
+     */
+    auto createFromEvent(sdbusplus::exception::generated_event_base&& event)
+        -> sdbusplus::message::object_path;
+
     /** @brief Common wrapper for creating an Entry object
      *
      * @return true if quiesce on error setting is enabled, false otherwise
@@ -351,10 +357,8 @@
     {
         log<level::INFO>("Deleting all log entries");
         auto numbersOfLogs = manager.eraseAll();
-        std::map<std::string, std::string> additionalData;
-        additionalData.emplace("NUM_LOGS", std::to_string(numbersOfLogs));
-        manager.create(LogsCleared::errName, Severity::Informational,
-                       additionalData);
+        manager.createFromEvent(
+            LoggingCleared("NUMBER_OF_LOGS", numbersOfLogs));
     }
 
     /** @brief D-Bus method call implementation to create an event log.
diff --git a/yaml/xyz/openbmc_project/Logging.errors.yaml b/yaml/xyz/openbmc_project/Logging.errors.yaml
deleted file mode 100644
index e90bc7c..0000000
--- a/yaml/xyz/openbmc_project/Logging.errors.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-# xyz.openbmc_project.Logging.Error
-- name: LogsCleared
-  description: Indicate the user cleared all the logs
diff --git a/yaml/xyz/openbmc_project/Logging.metadata.yaml b/yaml/xyz/openbmc_project/Logging.metadata.yaml
deleted file mode 100644
index 99d647a..0000000
--- a/yaml/xyz/openbmc_project/Logging.metadata.yaml
+++ /dev/null
@@ -1,5 +0,0 @@
-- name: LogsCleared
-  level: INFO
-  meta:
-      - str: "NUM_LOGS=%u"
-        type: size_t
