diff --git a/lib/lg2_commit.cpp b/lib/lg2_commit.cpp
index 60dd30e..4d75594 100644
--- a/lib/lg2_commit.cpp
+++ b/lib/lg2_commit.cpp
@@ -56,6 +56,36 @@
     auto j = t.to_json()[t.name()];
     for (const auto& item : j.items())
     {
+        // Special cases for the "_SOURCE" fields, which contain debug
+        // information about the origin of the event.
+        if (item.key() == "_SOURCE")
+        {
+            for (const auto& source_item : item.value().items())
+            {
+                if (source_item.key() == "PID")
+                {
+                    result.emplace("_PID", source_item.value().dump());
+                    continue;
+                }
+                if (source_item.key() == "FILE")
+                {
+                    result.emplace("_CODE_FILE", source_item.value());
+                    continue;
+                }
+                if (source_item.key() == "FUNCTION")
+                {
+                    result.emplace("_CODE_FUNC", source_item.value());
+                    continue;
+                }
+                if (source_item.key() == "LINE")
+                {
+                    result.emplace("_CODE_LINE", source_item.value().dump());
+                    continue;
+                }
+            }
+            continue;
+        }
+
         result.emplace(item.key(), item.value().dump());
     }
 
diff --git a/test/log_manager_dbus_tests.cpp b/test/log_manager_dbus_tests.cpp
index ac33ded..e2bc8be 100644
--- a/test/log_manager_dbus_tests.cpp
+++ b/test/log_manager_dbus_tests.cpp
@@ -113,8 +113,10 @@
 {
     sdbusplus::message::object_path path{};
     std::string log_count{};
+    pid_t pid = 0;
+    std::string source_file{};
 
-    auto create_log = [this, &path, &log_count]() -> sdbusplus::async::task<> {
+    auto create_log = [&, this]() -> sdbusplus::async::task<> {
         // Log an event.
         path = co_await lg2::commit(data->client_ctx,
                                     LoggingCleared("NUMBER_OF_LOGS", 6));
@@ -125,12 +127,24 @@
                                   .path(path.str)
                                   .additional_data();
 
-        // Extract the NUMBER_OF_LOGS.
+        // Extract the NUMBER_OF_LOGS, PID, and CODE_FILE.
         for (const auto& value : additionalData)
         {
+            auto getValue = [&value]() {
+                return value.substr(value.find_first_of('=') + 1);
+            };
+
             if (value.starts_with("NUMBER_OF_LOGS="))
             {
-                log_count = value.substr(value.find_first_of('=') + 1);
+                log_count = getValue();
+            }
+            if (value.starts_with("_PID="))
+            {
+                pid = std::stoull(getValue());
+            }
+            if (value.starts_with("_CODE_FILE="))
+            {
+                source_file = getValue();
             }
         }
 
@@ -148,6 +162,8 @@
                     LoggingEntry::namespace_path::entry));
 
     EXPECT_EQ(log_count, "6");
+    EXPECT_EQ(pid, getpid());
+    EXPECT_EQ(source_file, std::source_location::current().file_name());
 }
 
 } // namespace phosphor::logging::test
