diff --git a/src/manager.cpp b/src/manager.cpp
index 14654be..0cb4259 100644
--- a/src/manager.cpp
+++ b/src/manager.cpp
@@ -21,6 +21,7 @@
 
 #include <boost/asio.hpp>
 #include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
@@ -119,8 +120,7 @@
         // BIOS attribute not found in the BaseBIOSTable
         if (iter == biosTable.end())
         {
-            phosphor::logging::log<phosphor::logging::level::ERR>(
-                "BIOS attribute not found in the BaseBIOSTable");
+            lg2::error("BIOS attribute not found in the BaseBIOSTable");
             throw AttributeNotFound();
         }
 
@@ -128,8 +128,7 @@
             std::get<static_cast<uint8_t>(Index::attributeType)>(iter->second);
         if (attributeType != std::get<0>(pair.second))
         {
-            phosphor::logging::log<phosphor::logging::level::ERR>(
-                "attributeType is not same with bios base table");
+            lg2::error("attributeType is not same with bios base table");
             throw InvalidArgument();
         }
 
@@ -139,8 +138,7 @@
             // For enumeration the expected variant types is Enumeration
             if (std::get<1>(pair.second).index() == 0)
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "Enumeration property value is not enum");
+                lg2::error("Enumeration property value is not enum");
                 throw InvalidArgument();
             }
 
@@ -163,8 +161,7 @@
 
             if (!found)
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "No valid attribute");
+                lg2::error("No valid attribute");
                 throw InvalidArgument();
             }
         }
@@ -174,8 +171,7 @@
             // For enumeration the expected variant types is std::string
             if (std::get<1>(pair.second).index() == 0)
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "String property value is not string");
+                lg2::error("String property value is not string");
                 throw InvalidArgument();
             }
 
@@ -196,10 +192,8 @@
 
             if (optionsIterator == options.end())
             {
-                std::string error =
-                    attrValue + " is not a valid value for " + pair.first;
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    error.c_str());
+                lg2::error("{ATTRVALUE} is not a valid value for {NAME}",
+                           "ATTRVALUE", attrValue, "NAME", pair.first);
                 throw InvalidArgument();
             }
         }
@@ -209,8 +203,7 @@
             // For enumeration the expected variant types is Integer
             if (std::get<1>(pair.second).index() == 1)
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "Enumeration property value is not int");
+                lg2::error("Enumeration property value is not int");
                 throw InvalidArgument();
             }
 
@@ -241,16 +234,16 @@
 
             if ((attrValue < lowerBound) || (attrValue > upperBound))
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "Integer, bound is invalid");
+                lg2::error("Integer, bound is invalid");
                 throw InvalidArgument();
             }
 
             if (((std::abs(attrValue - lowerBound)) % scalarIncrement) != 0)
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
-                    "((std::abs(attrValue - lowerBound)) % scalarIncrement) != "
-                    "0");
+                lg2::error(
+                    "((std::abs({ATTR_VALUE} - {LOWER_BOUND})) % {SCALAR_INCREMENT}) != 0",
+                    "ATTR_VALUE", attrValue, "LOWER_BOUND", lowerBound,
+                    "SCALAR_INCREMENT", scalarIncrement);
                 throw InvalidArgument();
             }
         }
diff --git a/src/manager_serialize.cpp b/src/manager_serialize.cpp
index 0756006..18163b7 100644
--- a/src/manager_serialize.cpp
+++ b/src/manager_serialize.cpp
@@ -7,15 +7,13 @@
 #include <cereal/types/tuple.hpp>
 #include <cereal/types/variant.hpp>
 #include <cereal/types/vector.hpp>
-#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/lg2.hpp>
 
 #include <fstream>
 
 namespace bios_config
 {
 
-using namespace phosphor::logging;
-
 /** @brief Function required by Cereal to perform serialization.
  *
  *  @tparam Archive - Cereal archive type (binary in this case).
@@ -77,13 +75,13 @@
     }
     catch (cereal::Exception& e)
     {
-        log<level::ERR>(e.what());
+        lg2::error("Failed to serialize: {ERROR}", "ERROR", e);
         fs::remove(path);
         return false;
     }
     catch (const std::length_error& e)
     {
-        log<level::ERR>(e.what());
+        lg2::error("Failed to serialize: {ERROR}", "ERROR", e);
         fs::remove(path);
         return false;
     }
diff --git a/src/password.cpp b/src/password.cpp
index 3aacc45..5231120 100644
--- a/src/password.cpp
+++ b/src/password.cpp
@@ -21,6 +21,7 @@
 #include <boost/algorithm/hex.hpp>
 #include <boost/asio.hpp>
 #include <phosphor-logging/elog-errors.hpp>
+#include <phosphor-logging/lg2.hpp>
 #include <sdbusplus/asio/connection.hpp>
 #include <sdbusplus/asio/object_server.hpp>
 
@@ -36,7 +37,7 @@
                        const std::array<uint8_t, maxSeedSize>& seed,
                        const std::string rawData, const std::string algo)
 {
-    phosphor::logging::log<phosphor::logging::level::ERR>("isMatch");
+    lg2::error("isMatch");
 
     if (algo == "SHA256")
     {
@@ -49,9 +50,8 @@
                 reinterpret_cast<const unsigned char*>(seed.data()),
                 seed.size(), iterValue, EVP_sha256(), hashLen, output.data()))
         {
-            phosphor::logging::log<phosphor::logging::level::ERR>(
-                "Generate PKCS5_PBKDF2_HMAC_SHA256 Integrity Check Value "
-                "failed");
+            lg2::error(
+                "Generate PKCS5_PBKDF2_HMAC_SHA256 Integrity Check Value failed");
             throw InternalFailure();
         }
 
@@ -78,9 +78,8 @@
                 reinterpret_cast<const unsigned char*>(seed.data()),
                 seed.size(), iterValue, EVP_sha384(), hashLen, output.data()))
         {
-            phosphor::logging::log<phosphor::logging::level::ERR>(
-                "Generate PKCS5_PBKDF2_HMAC_SHA384 Integrity Check Value "
-                "failed");
+            lg2::error(
+                "Generate PKCS5_PBKDF2_HMAC_SHA384 Integrity Check Value failed");
             throw InternalFailure();
         }
 
@@ -121,8 +120,8 @@
                 }
                 catch (const nlohmann::json::parse_error& e)
                 {
-                    phosphor::logging::log<phosphor::logging::level::ERR>(
-                        e.what());
+                    lg2::error("Failed to parse JSON file: {ERROR}", "ERROR",
+                               e);
                     throw InternalFailure();
                 }
 
@@ -142,7 +141,7 @@
         }
         catch (nlohmann::detail::exception& e)
         {
-            phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
+            lg2::error("Failed to parse JSON file: {ERROR}", "ERROR", e);
             throw InternalFailure();
         }
         if (userName == "AdminPassword")
@@ -171,7 +170,7 @@
                     seed.size(), iterValue, EVP_sha256(), mdLen,
                     mNewPwdHash.data()))
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
+                lg2::error(
                     "Verify PKCS5_PBKDF2_HMAC_SHA256 Integrity Check failed");
                 throw InternalFailure();
             }
@@ -188,7 +187,7 @@
                     seed.size(), iterValue, EVP_sha384(), mdLen,
                     mNewPwdHash.data()))
             {
-                phosphor::logging::log<phosphor::logging::level::ERR>(
+                lg2::error(
                     "Verify PKCS5_PBKDF2_HMAC_SHA384 Integrity Check failed");
                 throw InternalFailure();
             }
@@ -200,8 +199,7 @@
 void Password::changePassword(std::string userName, std::string currentPassword,
                               std::string newPassword)
 {
-    phosphor::logging::log<phosphor::logging::level::DEBUG>(
-        "BIOS config changePassword");
+    lg2::debug("BIOS config changePassword");
     verifyPassword(userName, currentPassword, newPassword);
 
     std::ifstream fs(seedFile.c_str());
@@ -215,7 +213,7 @@
         }
         catch (const nlohmann::json::parse_error& e)
         {
-            phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
+            lg2::error("Failed to parse JSON file: {ERROR}", "ERROR", e);
             throw InternalFailure();
         }
 
@@ -233,8 +231,7 @@
     }
     else
     {
-        phosphor::logging::log<phosphor::logging::level::DEBUG>(
-            "Cannot open file stream");
+        lg2::debug("Cannot open file stream");
         throw InternalFailure();
     }
 }
@@ -244,8 +241,7 @@
         *systemBus, objectPathPwd),
     objServer(objectServer), systemBus(systemBus)
 {
-    phosphor::logging::log<phosphor::logging::level::DEBUG>(
-        "BIOS config password is runing");
+    lg2::debug("BIOS config password is runing");
     try
     {
         fs::path biosDir(BIOS_PERSIST_PATH);
@@ -254,7 +250,7 @@
     }
     catch (const fs::filesystem_error& e)
     {
-        phosphor::logging::log<phosphor::logging::level::ERR>(e.what());
+        lg2::error("Failed to parse JSON file: {ERROR}", "ERROR", e);
         throw InternalFailure();
     }
 }
