diff --git a/phosphor-rsyslog-config/Makefile.am b/phosphor-rsyslog-config/Makefile.am
index f695946..d1c5425 100644
--- a/phosphor-rsyslog-config/Makefile.am
+++ b/phosphor-rsyslog-config/Makefile.am
@@ -1,3 +1,5 @@
+AM_CPPFLAGS = -I$(top_srcdir)
+
 noinst_HEADERS = \
 	utils.hpp \
 	server-conf.hpp
diff --git a/phosphor-rsyslog-config/server-conf.cpp b/phosphor-rsyslog-config/server-conf.cpp
index 1372e85..1b46965 100644
--- a/phosphor-rsyslog-config/server-conf.cpp
+++ b/phosphor-rsyslog-config/server-conf.cpp
@@ -1,6 +1,16 @@
 #include "server-conf.hpp"
 #include "utils.hpp"
+#include "xyz/openbmc_project/Common/error.hpp"
 #include <fstream>
+#include <phosphor-logging/log.hpp>
+#include <phosphor-logging/elog.hpp>
+#if __has_include("../../usr/include/phosphor-logging/elog-errors.hpp")
+#include "../../usr/include/phosphor-logging/elog-errors.hpp"
+#else
+#include <phosphor-logging/elog-errors.hpp>
+#endif
+#include <netdb.h>
+#include <arpa/inet.h>
 
 namespace phosphor
 {
@@ -8,30 +18,73 @@
 {
 
 namespace utils = phosphor::rsyslog_utils;
+using namespace phosphor::logging;
+using namespace sdbusplus::xyz::openbmc_project::Common::Error;
 
 std::string Server::address(std::string value)
 {
-    auto serverAddress = address();
-    if (serverAddress == value)
+    using Argument = xyz::openbmc_project::Common::InvalidArgument;
+    std::string result {};
+
+    try
     {
-        return serverAddress;
+        auto serverAddress = address();
+        if (serverAddress == value)
+        {
+            return serverAddress;
+        }
+
+        if (!value.empty() && !addressValid(value))
+        {
+            elog<InvalidArgument>(Argument::ARGUMENT_NAME("Address"),
+                                  Argument::ARGUMENT_VALUE(value.c_str()));
+        }
+
+        writeConfig(value, port(), configFilePath.c_str());
+        result = std::move(NetworkClient::address(value));
+    }
+    catch (const InvalidArgument& e)
+    {
+        throw;
+    }
+    catch (const InternalFailure& e)
+    {
+        throw;
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>(e.what());
+        elog<InternalFailure>();
     }
 
-    writeConfig(value, port(), configFilePath.c_str());
-    auto result = NetworkClient::address(value);
     return result;
 }
 
 uint16_t Server::port(uint16_t value)
 {
-    auto serverPort = port();
-    if (serverPort == value)
+    uint16_t result {};
+
+    try
     {
-        return serverPort;
+        auto serverPort = port();
+        if (serverPort == value)
+        {
+            return serverPort;
+        }
+
+        writeConfig(address(), value, configFilePath.c_str());
+        result = NetworkClient::port(value);
+    }
+    catch (const InternalFailure& e)
+    {
+        throw;
+    }
+    catch (const std::exception& e)
+    {
+        log<level::ERR>(e.what());
+        elog<InternalFailure>();
     }
 
-    writeConfig(address(), value, configFilePath.c_str());
-    auto result = NetworkClient::port(value);
     return result;
 }
 
@@ -56,5 +109,24 @@
     utils::restart();
 }
 
+bool Server::addressValid(const std::string& address)
+{
+    addrinfo hints{};
+    addrinfo* res = nullptr;
+    hints.ai_family = AF_UNSPEC;
+    hints.ai_socktype = SOCK_STREAM;
+    hints.ai_flags |= AI_CANONNAME;
+
+    auto result = getaddrinfo(address.c_str(), nullptr, &hints, &res);
+    if (result)
+    {
+        log<level::ERR>("bad address",
+                        entry("ADDRESS=%s", address.c_str()),
+                        entry("ERRNO=%d", result));
+        return false;
+    }
+    return true;
+}
+
 } // namespace rsyslog_config
 } // namespace phosphor
diff --git a/phosphor-rsyslog-config/server-conf.hpp b/phosphor-rsyslog-config/server-conf.hpp
index cb8882b..795cfb6 100644
--- a/phosphor-rsyslog-config/server-conf.hpp
+++ b/phosphor-rsyslog-config/server-conf.hpp
@@ -69,6 +69,12 @@
                  uint16_t serverPort,
                  const char* filePath);
 
+        /** @brief Checks if input IP address is valid (uses getaddrinfo)
+         *  @param[in] address - server address
+         *  @returns true if valid, false otherwise
+         */
+        bool addressValid(const std::string& address);
+
         std::string configFilePath{};
 };
 
