diff --git a/Makefile.am b/Makefile.am
index 3f10b0e..973533d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -68,10 +68,11 @@
 
 ELOG_MAKO ?= elog-gen-template.mako.hpp
 LOOKUP_MAKO ?= elog-lookup-template.mako.cpp
-ELOG_YAML_DIR ?= ${abs_srcdir}/tools/example/
+ELOG_YAML_DIR ?= "None"
+ELOG_YAML_DIR_TEST ?= ${abs_srcdir}/tools/
 ELOG_TEMPLATE_DIR ?= ${abs_srcdir}/tools/phosphor-logging/templates/
 REQ_FILES_TO_GEN ?= ${abs_srcdir}/tools/elog-gen.py\
-	$(ELOG_YAML_DIR)/$(ELOG_YAML)\
+	$(ELOG_YAML_DIR_TEST)/$(ELOG_YAML)\
 	${ELOG_TEMPLATE_DIR}/$(ELOG_MAKO)
 
 # Be sure to package up the required script, yaml, and mako template to
@@ -79,9 +80,9 @@
 EXTRA_DIST = $(REQ_FILES_TO_GEN)
 
 elog-gen.hpp: $(REQ_FILES_TO_GEN)
-	$(AM_V_at)$(PYTHON) ${abs_srcdir}/tools/elog-gen.py -y ${ELOG_YAML_DIR} -t ${ELOG_TEMPLATE_DIR} -m $(ELOG_MAKO) -o ${abs_srcdir}/elog-gen.hpp
+	$(AM_V_at)$(PYTHON) ${abs_srcdir}/tools/elog-gen.py -y ${ELOG_YAML_DIR} -u ${ELOG_YAML_DIR_TEST} -t ${ELOG_TEMPLATE_DIR} -m $(ELOG_MAKO) -o ${abs_srcdir}/elog-gen.hpp
 elog-lookup.cpp: $(REQ_FILES_TO_GEN)
-	$(AM_V_at)$(PYTHON) ${abs_srcdir}/tools/elog-gen.py -y ${ELOG_YAML_DIR} -t ${ELOG_TEMPLATE_DIR} -m $(LOOKUP_MAKO) -o ${abs_srcdir}/elog-lookup.cpp
+	$(AM_V_at)$(PYTHON) ${abs_srcdir}/tools/elog-gen.py -y ${ELOG_YAML_DIR} -u ${ELOG_YAML_DIR_TEST} -t ${ELOG_TEMPLATE_DIR} -m $(LOOKUP_MAKO) -o ${abs_srcdir}/elog-lookup.cpp
 
 pkgconfiglibdir = ${libdir}/pkgconfig
 pkgconfiglib_DATA = phosphor-logging.pc
diff --git a/tools/elog-gen.py b/tools/elog-gen.py
index fe4807e..3cf396c 100755
--- a/tools/elog-gen.py
+++ b/tools/elog-gen.py
@@ -56,9 +56,14 @@
     return True
 
 
-def get_error_yaml_files(i_yaml_dir):
+def get_error_yaml_files(i_yaml_dir, i_test_dir):
     yaml_files = []
-    for root, dirs, files in os.walk(i_yaml_dir):
+    if i_yaml_dir != "None":
+        for root, dirs, files in os.walk(i_yaml_dir):
+            for files in filter(lambda file:
+                                file.endswith('.errors.yaml'), files):
+                yaml_files.append(os.path.join(root, files))
+    for root, dirs, files in os.walk(i_test_dir):
         for files in filter(lambda file: file.endswith('.errors.yaml'), files):
             yaml_files.append(os.path.join(root, files))
     return yaml_files
@@ -86,14 +91,15 @@
     return typeMap[i_type]
 
 
-def gen_elog_hpp(i_yaml_dir, i_output_hpp,
+def gen_elog_hpp(i_yaml_dir, i_test_dir, i_output_hpp,
                  i_template_dir, i_elog_mako, i_error_namespace):
     r"""
     Read  yaml file(s) under input yaml dir, grab the relevant data and call
     the mako template to generate the output header file.
 
     Description of arguments:
-    i_yaml_dir                  directory containing error yaml files
+    i_yaml_dir                  directory containing base error yaml files
+    i_test_dir                  directory containing test error yaml files
     i_output_hpp                name of the to be generated output hpp
     i_template_dir              directory containing error mako templates
     i_elog_mako                 error mako template to render
@@ -107,7 +113,7 @@
     meta_data = dict()  # The meta data info (type, format)
     parents = dict()
 
-    error_yamls = get_error_yaml_files(i_yaml_dir)
+    error_yamls = get_error_yaml_files(i_yaml_dir, i_test_dir)
 
     for error_yaml in error_yamls:
         # Verify the error yaml file
@@ -223,9 +229,13 @@
                       help="output hpp to generate, elog-gen.hpp is default")
 
     parser.add_option("-y", "--yamldir", dest="yamldir",
-                      default="./example/xyz/openbmc_project/Example",
+                      default="None",
                       help="Base directory of yaml files to process")
 
+    parser.add_option("-u", "--testdir", dest="testdir",
+                      default="./tools/example/",
+                      help="Unit test directory of yaml files to process")
+
     parser.add_option("-t", "--templatedir", dest="templatedir",
                       default="phosphor-logging/templates/",
                       help="Base directory of files to process")
@@ -237,6 +247,7 @@
     (options, args) = parser.parse_args(i_args)
 
     gen_elog_hpp(options.yamldir,
+                 options.testdir,
                  options.output_hpp,
                  options.templatedir,
                  options.elog_mako,
