diff --git a/pmbus.cpp b/pmbus.cpp
index b2fe2fd..3440667 100644
--- a/pmbus.cpp
+++ b/pmbus.cpp
@@ -100,8 +100,10 @@
     }
     catch (std::exception& e)
     {
-        log<level::ERR>("Unable to read PMBus device name",
-                        entry("PATH=%s", path.c_str()));
+        log<level::ERR>((std::string("Unable to read PMBus device name "
+                                     "PATH=") +
+                         path.string())
+                            .c_str());
     }
 
     return name;
@@ -136,9 +138,10 @@
 
         if (*err)
         {
-            log<level::ERR>("Invalid character in sysfs file",
-                            entry("FILE=%s", path.c_str()),
-                            entry("CONTENTS=%s", val.c_str()));
+            log<level::ERR>((std::string("Invalid character in sysfs file"
+                                         " FILE=") +
+                             path.string() + std::string(" CONTENTS=") + val)
+                                .c_str());
 
             // Catch below and handle as a read failure
             elog<InternalFailure>();
@@ -148,8 +151,11 @@
     {
         auto rc = errno;
 
-        log<level::ERR>("Failed to read sysfs file",
-                        entry("FILENAME=%s", path.c_str()));
+        log<level::ERR>((std::string("Failed to read sysfs file "
+                                     "errno=") +
+                         std::to_string(rc) + std::string(" FILENAME=") +
+                         path.string())
+                            .c_str());
 
         using metadata = xyz::openbmc_project::Common::Device::ReadFailure;
 
@@ -186,8 +192,10 @@
     catch (std::exception& e)
     {
         auto rc = errno;
-        log<level::ERR>("Failed to read sysfs file",
-                        entry("FILENAME=%s", path.c_str()));
+        log<level::ERR>((std::string("Failed to read sysfs file "
+                                     "errno=") +
+                         std::to_string(rc) + " FILENAME=" + path.string())
+                            .c_str());
 
         using metadata = xyz::openbmc_project::Common::Device::ReadFailure;
 
@@ -217,8 +225,10 @@
     catch (std::exception& e)
     {
         auto rc = errno;
-        log<level::ERR>("Failed to read sysfs file",
-                        entry("FILENAME=%s", path.c_str()));
+        log<level::ERR>((std::string("Failed to read sysfs file "
+                                     "errno=") +
+                         std::to_string(rc) + " FILENAME=" + path.string())
+                            .c_str());
 
         using metadata = xyz::openbmc_project::Common::Device::ReadFailure;
 
@@ -256,9 +266,11 @@
             else if (ferror(file.get()))
             {
                 auto rc = errno;
-                log<level::ERR>("Failed to read sysfs file",
-                                entry("FILENAME=%s", path.c_str()));
-
+                log<level::ERR>((std::string("Failed to read sysfs file "
+                                             "errno=") +
+                                 std::to_string(rc) +
+                                 " FILENAME=" + path.string())
+                                    .c_str());
                 using metadata =
                     xyz::openbmc_project::Common::Device::ReadFailure;
 
@@ -291,9 +303,10 @@
     catch (const std::exception& e)
     {
         auto rc = errno;
-
-        log<level::ERR>("Failed to write sysfs file",
-                        entry("FILENAME=%s", path.c_str()));
+        log<level::ERR>((std::string("Failed to write sysfs file "
+                                     "errno=") +
+                         std::to_string(rc) + " FILENAME=" + path.string())
+                            .c_str());
 
         using metadata = xyz::openbmc_project::Common::Device::WriteFailure;
 
@@ -318,16 +331,20 @@
     {
         // I need to specify binary mode when I construct the ofstream
         file.open(path, std::ios::out | std::ios_base::binary);
-        log<level::DEBUG>("Write data to sysfs file",
-                          entry("FILENAME=%s", path.c_str()));
+        log<level::DEBUG>(std::string("Write data to sysfs file "
+                                      "FILENAME=" +
+                                      path.string())
+                              .c_str());
         file.write(reinterpret_cast<const char*>(&data[0]), data.size());
     }
     catch (const std::exception& e)
     {
         auto rc = errno;
-
-        log<level::ERR>("Failed to write binary data to sysfs file",
-                        entry("FILENAME=%s", path.c_str()));
+        log<level::ERR>(
+            (std::string("Failed to write binary data to sysfs file "
+                         "errno=") +
+             std::to_string(rc) + " FILENAME=" + path.string())
+                .c_str());
 
         using metadata = xyz::openbmc_project::Common::Device::WriteFailure;
 
@@ -364,9 +381,11 @@
     // and let accesses fail later
     if (hwmonDir.empty())
     {
-        log<level::INFO>("Unable to find hwmon directory "
-                         "in device base path",
-                         entry("DEVICE_PATH=%s", basePath.c_str()));
+        log<level::INFO>(std::string("Unable to find hwmon directory "
+                                     "in device base path"
+                                     " DEVICE_PATH=" +
+                                     basePath.string())
+                             .c_str());
     }
 }
 
