diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 1bb2bf1..2edce0a 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -45,7 +45,7 @@
         messages::internalError(aResp->res);
         return;
     }
-    BMCWEB_LOG_DEBUG << "Dimm Functional:" << *isDimmFunctional;
+    BMCWEB_LOG_DEBUG << "Dimm Functional: " << *isDimmFunctional;
 
     // Set it as Enabled if atleast one DIMM is functional
     // Update STATE only if previous State was DISABLED and current Dimm is
@@ -80,7 +80,7 @@
         messages::internalError(aResp->res);
         return;
     }
-    BMCWEB_LOG_DEBUG << "Cpu Present:" << *isCpuPresent;
+    BMCWEB_LOG_DEBUG << "Cpu Present: " << *isCpuPresent;
 
     nlohmann::json &procCount =
         aResp->res.jsonValue["ProcessorSummary"]["Count"];
@@ -110,7 +110,7 @@
         messages::internalError(aResp->res);
         return;
     }
-    BMCWEB_LOG_DEBUG << "Cpu Functional:" << *isCpuFunctional;
+    BMCWEB_LOG_DEBUG << "Cpu Functional: " << *isCpuFunctional;
 
     nlohmann::json &prevProcState =
         aResp->res.jsonValue["ProcessorSummary"]["Status"]["State"];
@@ -197,7 +197,7 @@
                                     }
                                     BMCWEB_LOG_DEBUG << "Got "
                                                      << properties.size()
-                                                     << "Dimm properties.";
+                                                     << " Dimm properties.";
 
                                     if (properties.size() > 0)
                                     {
@@ -284,7 +284,7 @@
                                     }
                                     BMCWEB_LOG_DEBUG << "Got "
                                                      << properties.size()
-                                                     << "Cpu properties.";
+                                                     << " Cpu properties.";
 
                                     if (properties.size() > 0)
                                     {
@@ -411,7 +411,7 @@
                                     }
                                     BMCWEB_LOG_DEBUG << "Got "
                                                      << properties.size()
-                                                     << "UUID properties.";
+                                                     << " UUID properties.";
                                     for (const std::pair<std::string,
                                                          VariantType>
                                              &property : properties)
@@ -459,9 +459,9 @@
                                         // interface
                                         return;
                                     }
-                                    BMCWEB_LOG_DEBUG << "Got "
-                                                     << propertiesList.size()
-                                                     << "properties for system";
+                                    BMCWEB_LOG_DEBUG
+                                        << "Got " << propertiesList.size()
+                                        << " properties for system";
                                     for (const std::pair<std::string,
                                                          VariantType>
                                              &property : propertiesList)
@@ -562,7 +562,7 @@
                 messages::internalError(aResp->res);
                 return;
             }
-            BMCWEB_LOG_DEBUG << "Got " << resp.size() << "led group objects.";
+            BMCWEB_LOG_DEBUG << "Got " << resp.size() << " led group objects.";
             for (const auto &objPath : resp)
             {
                 const std::string &path = objPath.first;
@@ -613,7 +613,7 @@
                 return;
             }
             BMCWEB_LOG_DEBUG << "Got " << properties.size()
-                             << "led properties.";
+                             << " led properties.";
             std::string output;
             for (const auto &property : properties)
             {
