diff --git a/evdevpp/evdev.hpp b/evdevpp/evdev.hpp
index 1861982..b0ba06e 100644
--- a/evdevpp/evdev.hpp
+++ b/evdevpp/evdev.hpp
@@ -36,6 +36,7 @@
 
 } // namespace details
 
+using namespace phosphor::logging;
 /** @class EvDev
  *  @brief Provides C++ bindings to the libevdev C API.
  */
@@ -72,7 +73,10 @@
                     evdev.get(), type, code, &val);
             if (!rc)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to libevdev_fetch_event_value",
+                        entry("TYPE=%d", type),
+                        entry("CODE=%d", code));
+                elog<InternalFailure>();
             }
 
             return val;
@@ -88,7 +92,9 @@
                         evdev.get(), LIBEVDEV_READ_FLAG_NORMAL, &ev);
                 if (rc < 0)
                 {
-                    phosphor::logging::elog<InternalFailure>();
+                    log<level::ERR>("Error in call to libevdev_next_event",
+                            entry("RC=%d", rc));
+                    elog<InternalFailure>();
                 }
 
                 if (ev.type == EV_SYN && ev.code == SYN_REPORT)
@@ -118,7 +124,10 @@
 
     if (rc)
     {
-        phosphor::logging::elog<InternalFailure>();
+        log<level::ERR>("Error in call to libevdev_new_from_fd",
+                entry("RC=%d", rc),
+                entry("FD=%d", fd));
+        elog<InternalFailure>();
     }
 
     return EvDev(dev);
diff --git a/sdevent/event.hpp b/sdevent/event.hpp
index 53776ae..2058462 100644
--- a/sdevent/event.hpp
+++ b/sdevent/event.hpp
@@ -42,6 +42,8 @@
 
 } // namespace details
 
+using namespace phosphor::logging;
+
 /** @class Event
  *  @brief Provides C++ bindings to the sd_event_* class functions.
  */
@@ -92,7 +94,9 @@
             auto rc = sd_event_loop(evt.get());
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_loop",
+                        entry("RC=%d", rc));
+                elog<InternalFailure>();
             }
         }
 
@@ -102,7 +106,10 @@
             auto rc = sd_event_exit(evt.get(), status);
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_exit",
+                        entry("RC=%d", rc),
+                        entry("STATUS=%d", status));
+                elog<InternalFailure>();
             }
         }
 
@@ -113,7 +120,9 @@
             auto rc = sd_event_get_exit_code(evt.get(), &status);
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_get_exit_code",
+                        entry("RC=%d", rc));
+                elog<InternalFailure>();
             }
 
             return status;
@@ -134,7 +143,9 @@
             auto rc = sd_event_now(evt.get(), CLOCK_MONOTONIC, &usec);
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_now",
+                        entry("RC=%d", rc));
+                elog<InternalFailure>();
             }
 
             microseconds d(usec);
@@ -172,7 +183,9 @@
     auto rc = sd_event_default(&e);
     if (rc < 0)
     {
-        phosphor::logging::elog<InternalFailure>();
+        log<level::ERR>("Error in call to sd_event_default",
+                entry("RC=%d", rc));
+        elog<InternalFailure>();
     }
 
     return Event(e, std::false_type());
diff --git a/sdevent/io.hpp b/sdevent/io.hpp
index 93625a0..f511cf0 100644
--- a/sdevent/io.hpp
+++ b/sdevent/io.hpp
@@ -17,6 +17,7 @@
 namespace io
 {
 
+using namespace phosphor::logging;
 /** @class IO
  *  @brief Provides C++ bindings to the sd_event_source* io functions.
  */
@@ -67,7 +68,10 @@
                 cb.get());
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_add_io",
+                        entry("RC=%d", rc),
+                        entry("FD=%d", fd));
+                elog<InternalFailure>();
             }
 
             src = decltype(src){source, std::false_type()};
diff --git a/sdevent/source.hpp b/sdevent/source.hpp
index be3a892..e90efd4 100644
--- a/sdevent/source.hpp
+++ b/sdevent/source.hpp
@@ -32,6 +32,8 @@
 
 } // namespace details
 
+using namespace phosphor::logging;
+
 /** @class Source
  *  @brief Provides C++ bindings to the sd_event_source* functions.
  */
@@ -83,7 +85,9 @@
             auto rc = sd_event_source_get_enabled(src.get(), &enabled);
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_source_get_enabled",
+                        entry("RC=%d", rc));
+                elog<InternalFailure>();
             }
 
             return enabled;
@@ -95,7 +99,10 @@
             auto rc = sd_event_source_set_enabled(src.get(), enable);
             if (rc < 0)
             {
-                phosphor::logging::elog<InternalFailure>();
+                log<level::ERR>("Error in call to sd_event_source_set_enabled",
+                        entry("RC=%d", rc),
+                        entry("ENABLE=%d", enable));
+                elog<InternalFailure>();
             }
         }
 
