diff --git a/phosphor-regulators/src/config_file_parser_error.hpp b/phosphor-regulators/src/config_file_parser_error.hpp
new file mode 100644
index 0000000..28db75a
--- /dev/null
+++ b/phosphor-regulators/src/config_file_parser_error.hpp
@@ -0,0 +1,87 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include <exception>
+#include <filesystem>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class ConfigFileParserError
+ *
+ * An error that occurred while parsing the JSON configuration file that
+ * controls the phosphor-regulators application.
+ */
+class ConfigFileParserError : public std::exception
+{
+  public:
+    // Specify which compiler-generated methods we want
+    ConfigFileParserError() = delete;
+    ConfigFileParserError(const ConfigFileParserError&) = default;
+    ConfigFileParserError(ConfigFileParserError&&) = default;
+    ConfigFileParserError& operator=(const ConfigFileParserError&) = default;
+    ConfigFileParserError& operator=(ConfigFileParserError&&) = default;
+    virtual ~ConfigFileParserError() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param pathName configuration file path name
+     * @param error error message
+     */
+    explicit ConfigFileParserError(const std::filesystem::path& pathName,
+                                   const std::string& error) :
+        pathName{pathName},
+        error{"ConfigFileParserError: " + pathName.string() + ": " + error}
+    {
+    }
+
+    /**
+     * Returns the configuration file path name.
+     *
+     * @return path name
+     */
+    const std::filesystem::path& getPathName()
+    {
+        return pathName;
+    }
+
+    /**
+     * Returns the description of this error.
+     *
+     * @return error description
+     */
+    const char* what() const noexcept override
+    {
+        return error.c_str();
+    }
+
+  private:
+    /**
+     * Configuration file path name.
+     */
+    const std::filesystem::path pathName;
+
+    /**
+     * Error message.
+     */
+    const std::string error{};
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/test/config_file_parser_error_tests.cpp b/phosphor-regulators/test/config_file_parser_error_tests.cpp
new file mode 100644
index 0000000..bb167bd
--- /dev/null
+++ b/phosphor-regulators/test/config_file_parser_error_tests.cpp
@@ -0,0 +1,48 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include "config_file_parser_error.hpp"
+
+#include <filesystem>
+
+#include <gtest/gtest.h>
+
+using namespace phosphor::power::regulators;
+
+TEST(ConfigFileParserErrorTests, Constructor)
+{
+    std::filesystem::path pathName{"/etc/phosphor-regulators/foo.json"};
+    ConfigFileParserError error{pathName, "Required property missing"};
+    EXPECT_EQ(error.getPathName(), pathName);
+    EXPECT_STREQ(error.what(),
+                 "ConfigFileParserError: /etc/phosphor-regulators/foo.json: "
+                 "Required property missing");
+}
+
+TEST(ConfigFileParserErrorTests, GetPathName)
+{
+    std::filesystem::path pathName{"/usr/share/phosphor-regulators/foo.json"};
+    ConfigFileParserError error{pathName, "Required property missing"};
+    EXPECT_EQ(error.getPathName(), pathName);
+}
+
+TEST(ConfigFileParserErrorTests, What)
+{
+    std::filesystem::path pathName{"/etc/phosphor-regulators/foo.json"};
+    ConfigFileParserError error{pathName, "Required property missing"};
+    EXPECT_STREQ(error.what(),
+                 "ConfigFileParserError: /etc/phosphor-regulators/foo.json: "
+                 "Required property missing");
+}
diff --git a/phosphor-regulators/test/meson.build b/phosphor-regulators/test/meson.build
index 08634a9..53a90c2 100644
--- a/phosphor-regulators/test/meson.build
+++ b/phosphor-regulators/test/meson.build
@@ -5,6 +5,7 @@
 
 phosphor_regulators_tests_source_files = [
     'chassis_tests.cpp',
+    'config_file_parser_error_tests.cpp',
     'configuration_tests.cpp',
     'device_tests.cpp',
     'id_map_tests.cpp',
