diff --git a/hsbp-manager/include/utils.hpp b/hsbp-manager/include/utils.hpp
index a3b0294..002b1ed 100644
--- a/hsbp-manager/include/utils.hpp
+++ b/hsbp-manager/include/utils.hpp
@@ -14,6 +14,8 @@
 // limitations under the License.
 */
 
+#include <systemd/sd-journal.h>
+
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/asio/io_context.hpp>
 #include <boost/asio/steady_timer.hpp>
@@ -184,3 +186,28 @@
         power::busname, power::path, properties::interface, properties::get,
         power::interface, power::property);
 }
+
+inline void logDeviceAdded(const std::string& model, const std::string& type,
+                           const std::string& sn)
+{
+    sd_journal_send("MESSAGE=%s", "Inventory Added", "PRIORITY=%i", LOG_ERR,
+                    "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryAdded",
+                    "REDFISH_MESSAGE_ARGS=%s,%s,%s", model.c_str(),
+                    type.c_str(), sn.c_str(), NULL);
+}
+
+inline void logDeviceRemoved(const std::string& model, const std::string& type,
+                             const std::string& sn)
+{
+    sd_journal_send("MESSAGE=%s", "Inventory Removed", "PRIORITY=%i", LOG_ERR,
+                    "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.InventoryRemoved",
+                    "REDFISH_MESSAGE_ARGS=%s,%s,%s", model.c_str(),
+                    type.c_str(), sn.c_str(), NULL);
+}
+
+inline void logDriveError(const std::string& name)
+{
+    sd_journal_send("MESSAGE=%s", "Drive Error", "PRIORITY=%i", LOG_ERR,
+                    "REDFISH_MESSAGE_ID=%s", "OpenBMC.0.1.DriveError",
+                    "REDFISH_MESSAGE_ARGS=%s", name.c_str(), NULL);
+}
diff --git a/hsbp-manager/src/hsbp_manager.cpp b/hsbp-manager/src/hsbp_manager.cpp
index d65d80c..f6a1b5f 100644
--- a/hsbp-manager/src/hsbp_manager.cpp
+++ b/hsbp-manager/src/hsbp_manager.cpp
@@ -148,13 +148,18 @@
     Drive(size_t driveIndex, bool present, bool isOperational, bool nvme,
           bool rebuilding) :
         isNvme(nvme),
-        isPresent(present)
+        isPresent(present), index(driveIndex)
     {
         constexpr const char* basePath =
             "/xyz/openbmc_project/inventory/item/drive/Drive_";
         itemIface = objServer.add_interface(
             basePath + std::to_string(driveIndex), inventory::interface);
         itemIface->register_property("Present", isPresent);
+        if (isPresent && !isNvme)
+        {
+            // nvme drives get detected by their fru
+            logDeviceAdded("Drive", std::to_string(index), "N/A");
+        }
         itemIface->register_property("PrettyName",
                                      "Drive " + std::to_string(driveIndex));
         itemIface->initialize();
@@ -245,6 +250,7 @@
         std::vector<Association> warning = {
             {"", "warning", globalInventoryPath}};
         associations->set_property("Associations", warning);
+        logDriveError("Drive " + std::to_string(index));
     }
 
     void clearFailed(void)
@@ -253,6 +259,25 @@
         associations->set_property("Associations", std::vector<Association>{});
     }
 
+    void setPresent(bool set)
+    {
+        // nvme drives get detected by their fru
+        if (isNvme || set == isPresent)
+        {
+            return;
+        }
+        itemIface->set_property("Present", set);
+        isPresent = set;
+        if (isPresent)
+        {
+            logDeviceAdded("Drive", std::to_string(index), "N/A");
+        }
+        else
+        {
+            logDeviceRemoved("Drive", std::to_string(index), "N/A");
+        }
+    }
+
     std::shared_ptr<sdbusplus::asio::dbus_interface> itemIface;
     std::shared_ptr<sdbusplus::asio::dbus_interface> operationalIface;
     std::shared_ptr<sdbusplus::asio::dbus_interface> rebuildingIface;
@@ -262,6 +287,7 @@
 
     bool isNvme;
     bool isPresent;
+    size_t index;
 };
 
 struct Backplane
@@ -405,8 +431,7 @@
             bool isRebuilding = isPresent && (rebuilding & (1 << ii));
 
             it->isNvme = isNvme;
-            it->itemIface->set_property("Present", isPresent);
-            it->isPresent = isPresent;
+            it->setPresent(isPresent);
             it->rebuildingIface->set_property("Rebuilding", isRebuilding);
             if (isFailed || isRebuilding)
             {
