'(examples: /path/to/test.json, /path/to/directory/, '
                  '"/path/to/*-file.json" -- don\'t forget the quote)',
         )
+        parser.add_argument(
+            '--logfile',
+            metavar='<logfile-str>',
+            help='Force Log filename.',
+            default=None
+        )
         return parser
 
     def __replace_var_in_str(self, data_str):
         return False
 
     def take_action(self, parsed_args):
+        if parsed_args.logfile:
+            self.logfile_name = parsed_args.logfile
         self.log.info("Write tests output to {}".format(self.logfile_name))
         if parsed_args.self:
             import sys
             )
 
     def test_file(self, testfile):
-        self.logfile_name = "/tmp/moonclient_test_{}.log".format(time.strftime("%Y%m%d-%H%M%S"))
-        self.logfile = open(self.logfile_name, "w")
+        if not self.logfile_name:
+            self.logfile_name = "/tmp/moonclient_test_{}.log".format(time.strftime("%Y%m%d-%H%M%S"))
+        self.logfile = open(self.logfile_name, "a")
+        self.logfile.write(80*"=" + "\n")
+        self.logfile.write(testfile + "\n\n")
         stdout_back = self.app.stdout
         tests_dict = json.load(open(testfile))
         self.log.debug("tests_dict = {}".format(tests_dict))
                     else:
                         command = test["command"] + " " + global_command_options
                     command = self.__replace_var_in_str(command)
-                    self.logfile.write(time.strftime(self.TIME_FORMAT) + " " + "-----> {}\n".format(command))
+                    self.logfile.write(time.strftime(self.TIME_FORMAT) + " " +
+                                       test["name"] + " " +
+                                       "-----> {}\n".format(command))
                     self.log.info("    \\-executing {}".format(command))
                     self.app.stdout = tmp_filename_fd
                     result_id = self.app.run_subcommand(shlex.split(command))
 
         "description": "Upload the Cirros image in glance"
       },
       {
-        "name": "nova image-list",
+        "name": "openstack image list",
         "external_command": "nova image-list",
         "result": "(?P<uuid_image>[\\w-]+)\\s+\\| cirros",
         "description": "Get an Image ID"
       },
       {
         "name": "add_subject",
-        "command": "subject add admin --subject_pass nomoresecrete",
+        "command": "subject add admin --subject_pass console",
         "result": "",
         "description": "",
         "command_options": ""
 
       {
         "name": "add_subject",
-        "command": "subject add admin --subject_pass nomoresecrete",
+        "command": "subject add admin --subject_pass console",
         "result": "",
         "description": "Add admin subject.",
         "command_options": ""
       {
         "auth_name": "demo",
         "auth_password": "console",
-        "auth_tenant": "admin",
+        "auth_tenant": "demo",
         "description": "Change user to demo"
       },
 
 
 
 
 def test_moon_openstack():
-    cmd = "moon test --password console --self"
+    log_filename = "moonclient_selftest.log"
+    cmd = "moon test --password console --self --logfile {}".format(log_filename)
 
-    ret_val = functest_utils.execute_command(cmd, logger)
+    ret_val = functest_utils.execute_command(cmd, exit_on_error=False)
 
-    return ret_val
+    return ret_val, open(log_filename, "rt").read()
 
 
 def main():
     else:
         logger.info("OS MOON ERROR")
         test_status = 'FAIL'
+        logger.info("Errors from OpenStack tests:")
+        logger.info(result_os[1])
+        logger.info("Errors from Federation tests:")
+        logger.info(result_odl[1])
 
     details = {
         'timestart': start_time,