diff --git a/sol/sol_context.cpp b/sol/sol_context.cpp
index 4428c9c..4702bbe 100644
--- a/sol/sol_context.cpp
+++ b/sol/sol_context.cpp
@@ -6,7 +6,9 @@
 #include "sessions_manager.hpp"
 #include "sol_manager.hpp"
 
-#include <phosphor-logging/log.hpp>
+#include <errno.h>
+
+#include <phosphor-logging/lg2.hpp>
 
 namespace sol
 {
@@ -96,7 +98,7 @@
      */
     if (seqNum && (seqNum != seqNums.get(true)))
     {
-        log<level::INFO>("Out of sequence SOL packet - packet is dropped");
+        lg2::info("Out of sequence SOL packet - packet is dropped");
         return;
     }
 
@@ -108,7 +110,7 @@
      */
     if (ackSeqNum && (ackSeqNum != seqNums.get(false)))
     {
-        log<level::INFO>("Out of sequence ack number - SOL packet is dropped");
+        lg2::info("Out of sequence ack number - SOL packet is dropped");
         return;
     }
 
@@ -149,7 +151,8 @@
         auto rc = sol::Manager::get().writeConsoleSocket(input);
         if (rc)
         {
-            log<level::ERR>("Writing to console socket descriptor failed");
+            lg2::error("Writing to console socket descriptor failed: {ERROR}",
+                       "ERROR", strerror(errno));
             ack = true;
         }
         else
@@ -283,7 +286,8 @@
     }
     catch (const std::exception& e)
     {
-        log<level::ERR>(e.what());
+        lg2::error("Failed to call the sendOutboundPayload method: {ERROR}",
+                   "ERROR", e);
     }
 }
 
@@ -307,7 +311,7 @@
     }
     catch (const std::exception& e)
     {
-        log<level::ERR>(e.what());
+        lg2::error("Failed to retry timer: {ERROR}", "ERROR", e);
     }
 }
 } // namespace sol
diff --git a/sol/sol_manager.cpp b/sol/sol_manager.cpp
index 3c01212..42296e3 100644
--- a/sol/sol_manager.cpp
+++ b/sol/sol_manager.cpp
@@ -11,7 +11,7 @@
 #include <boost/asio/local/stream_protocol.hpp>
 #include <boost/asio/write.hpp>
 #include <ipmid/utils.hpp>
-#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/message/types.hpp>
 
 #include <chrono>
@@ -24,8 +24,6 @@
 namespace sol
 {
 
-using namespace phosphor::logging;
-
 std::unique_ptr<sdbusplus::bus::match_t> matchPtrSOL(nullptr);
 std::unique_ptr<sdbusplus::bus::match_t> solConfPropertiesSignal(nullptr);
 
@@ -51,8 +49,9 @@
     }
     else
     {
-        log<level::ERR>("Reading ready count from host console socket failed:",
-                        entry("EXCEPTION=%s", ec.message().c_str()));
+        lg2::error(
+            "Reading ready count from host console socket failed: {ERROR}",
+            "ERROR", ec.value());
         return;
     }
     std::vector<uint8_t> buffer(readSize);
@@ -61,8 +60,8 @@
         consoleSocket->read_some(boost::asio::buffer(buffer), ec);
     if (ec)
     {
-        log<level::ERR>("Reading from host console socket failed:",
-                        entry("EXCEPTION=%s", ec.message().c_str()));
+        lg2::error("Reading from host console socket failed: {ERROR}", "ERROR",
+                   ec.value());
         return;
     }
 
@@ -128,8 +127,7 @@
         catch (const std::runtime_error& e)
         {
             solService.clear();
-            phosphor::logging::log<phosphor::logging::level::ERR>(
-                "Error: get SOL service failed");
+            lg2::error("Get SOL service failed: {ERROR}", "ERROR", e);
             return;
         }
     }
@@ -138,10 +136,9 @@
         properties = ipmi::getAllDbusProperties(
             dbus, solService, solPathWitheEthName, solInterface);
     }
-    catch (const std::runtime_error&)
+    catch (const std::runtime_error& e)
     {
-        phosphor::logging::log<phosphor::logging::level::ERR>(
-            "Error setting sol parameter");
+        lg2::error("Setting sol parameter: {ERROR}", "ERROR", e);
         return;
     }
 
@@ -181,9 +178,9 @@
         }
         catch (const std::exception& e)
         {
-            log<level::ERR>("Encountered exception when starting host console. "
-                            "Hence stopping host console.",
-                            entry("EXCEPTION=%s", e.what()));
+            lg2::error(
+                "Encountered exception when starting host console. Hence stopping host console: {ERROR}",
+                "ERROR", e);
             stopHostConsole();
             throw;
         }
@@ -265,8 +262,9 @@
     }
     catch (const sdbusplus::exception_t& e)
     {
-        log<level::ERR>(
-            "Failed to get service path in registerSOLServiceChangeCallback");
+        lg2::error(
+            "Failed to get service path in registerSOLServiceChangeCallback: {ERROR}",
+            "ERROR", e);
     }
 }
 
@@ -285,9 +283,8 @@
     }
     catch (const std::exception& e)
     {
-        phosphor::logging::log<phosphor::logging::level::ERR>(
-            "procSolConfChange get properties FAIL",
-            entry("ERROR=%s", e.what()));
+        lg2::error("procSolConfChange get properties FAIL: {ERROR}", "ERROR",
+                   e);
         return;
     }
 
@@ -351,9 +348,9 @@
         }
         catch (const sdbusplus::exception_t& e)
         {
-            log<level::ERR>("Failed to get service path in "
-                            "registerSolConfChangeCallbackHandler",
-                            entry("CHANNEL=%s", channel.c_str()));
+            lg2::error(
+                "Failed to get service path in registerSolConfChangeCallbackHandler, channel: {CHANNEL}, error: {ERROR}",
+                "CHANNEL", channel, "ERROR", e);
         }
     }
     return;
