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;
