diff --git a/ffdc/collect_ffdc.py b/ffdc/collect_ffdc.py
index 730f830..e783e0c 100644
--- a/ffdc/collect_ffdc.py
+++ b/ffdc/collect_ffdc.py
@@ -79,24 +79,24 @@
     if not remote:
         all_options_ok = False
         print("\
-        \n>>>>>\tERROR: Name/IP of the remote host is not specified in CLI options or env OPENBMC_HOST.")
+        \n\tERROR: Name/IP of the remote host is not specified in CLI options or env OPENBMC_HOST.")
     if not username:
         all_options_ok = False
         print("\
-        \n>>>>>\tERROR: User on the remote host is not specified in CLI options or env OPENBMC_USERNAME.")
+        \n\tERROR: User on the remote host is not specified in CLI options or env OPENBMC_USERNAME.")
     if not password:
         all_options_ok = False
         print("\
-        \n>>>>>\tERROR: Password for user on remote host is not specified in CLI options "
+        \n\tERROR: Password for user on remote host is not specified in CLI options "
               + "or env OPENBMC_PASSWORD.")
     if not remote_type:
         all_options_ok = False
         print("\
-        \n>>>>>\tERROR: Remote host os type is not specified in CLI options.")
+        \n\tERROR: Remote host os type is not specified in CLI options.")
     if not os.path.isfile(ffdc_config):
         all_options_ok = False
         print("\
-        \n>>>>>\tERROR: Config file %s is not found.  Please verify path and filename." % ffdc_config)
+        \n\tERROR: Config file %s is not found.  Please verify path and filename." % ffdc_config)
 
     return all_options_ok
 
diff --git a/ffdc/ffdc_collector.py b/ffdc/ffdc_collector.py
index a761451..3f5c599 100644
--- a/ffdc/ffdc_collector.py
+++ b/ffdc/ffdc_collector.py
@@ -174,7 +174,7 @@
             return True
         else:
             self.logger.error(
-                "\n>>>>>\tERROR: %s is not ping-able. FFDC collection aborted.\n" % self.hostname)
+                "\n\tERROR: %s is not ping-able. FFDC collection aborted.\n" % self.hostname)
             sys.exit(-1)
 
     def collect_ffdc(self):
@@ -241,7 +241,7 @@
             if ((self.remote_protocol not in working_protocol_list) and (self.remote_protocol != 'ALL')):
                 self.logger.info("\n\tWorking protocol list: %s" % working_protocol_list)
                 self.logger.error(
-                    '>>>>>\tERROR: Requested protocol %s is not in working protocol list.\n'
+                    '\tERROR: Requested protocol %s is not in working protocol list.\n'
                     % self.remote_protocol)
                 sys.exit(-1)
             else:
@@ -724,10 +724,10 @@
                 # PermissionError
                 if e.errno == EPERM or e.errno == EACCES:
                     self.logger.error(
-                        '>>>>>\tERROR: os.makedirs %s failed with PermissionError.\n' % dir_path)
+                        '\tERROR: os.makedirs %s failed with PermissionError.\n' % dir_path)
                 else:
                     self.logger.error(
-                        '>>>>>\tERROR: os.makedirs %s failed with %s.\n' % (dir_path, e.strerror))
+                        '\tERROR: os.makedirs %s failed with %s.\n' % (dir_path, e.strerror))
                 sys.exit(-1)
 
     def print_progress(self, progress):
@@ -779,8 +779,8 @@
                                 universal_newlines=True)
 
         if result.stderr and not quiet:
-            self.logger.error('\n\t\tERROR with redfishtool ' + parms_string)
-            self.logger.error('\t\t' + result.stderr)
+            self.logger.error('\n\tERROR with redfishtool ' + parms_string)
+            self.logger.error('\n\t%s' % result.stderr.split('\n'))
 
         return result.stdout
 
diff --git a/ffdc/ssh_utility.py b/ffdc/ssh_utility.py
index f363e82..f4182ec 100644
--- a/ffdc/ssh_utility.py
+++ b/ffdc/ssh_utility.py
@@ -99,8 +99,8 @@
         except (paramiko.AuthenticationException, paramiko.SSHException,
                 paramiko.ChannelException, SocketTimeout) as e:
             # Log command with error. Return to caller for next command, if any.
-            logging.error("\n>>>>>\tERROR: Fail remote command %s %s" % (e.__class__, e))
-            logging.error(">>>>>\tCommand '%s' Elapsed Time %s" %
+            logging.error("\n\tERROR: Fail remote command %s %s" % (e.__class__, e))
+            logging.error("\tCommand '%s' Elapsed Time %s" %
                           (command, time.strftime("%H:%M:%S", time.gmtime(time.time() - cmd_start))))
             return 0, empty, empty
 
@@ -114,9 +114,9 @@
             logging.info("\n\t[Check] %s SCP transport established.\t [OK]" % self.hostname)
         except (SCPException, SocketTimeout, PipeTimeout) as e:
             self.scpclient = None
-            logging.error("\n>>>>>\tERROR: SCP get_transport has failed. %s %s" % (e.__class__, e))
-            logging.info(">>>>>\tScript continues generating FFDC on %s." % self.hostname)
-            logging.info(">>>>>\tCollected data will need to be manually offloaded.")
+            logging.error("\n\tERROR: SCP get_transport has failed. %s %s" % (e.__class__, e))
+            logging.info("\tScript continues generating FFDC on %s." % self.hostname)
+            logging.info("\tCollected data will need to be manually offloaded.")
 
     def scp_file_from_remote(self, remote_file, local_file):
 
@@ -136,7 +136,7 @@
         except (SCPException, SocketTimeout, PipeTimeout) as e:
             # Log command with error. Return to caller for next file, if any.
             logging.error(
-                "\n>>>>>\tERROR: Fail scp %s from remotehost %s %s\n\n" % (remote_file, e.__class__, e))
+                "\n\tERROR: Fail scp %s from remotehost %s %s\n\n" % (remote_file, e.__class__, e))
             return False
 
         # Return True for file accounting
diff --git a/ffdc/telnet_utility.py b/ffdc/telnet_utility.py
index 761ac58..e2a3adf 100644
--- a/ffdc/telnet_utility.py
+++ b/ffdc/telnet_utility.py
@@ -49,14 +49,14 @@
                             timeout=self.read_timeout)
                     if n == 0 or n == 1:
                         logging.error(
-                            "\n>>>>>\tERROR: Telnet Authentication Failed.  Check userid and password.\n\n")
+                            "\n\tERROR: Telnet Authentication Failed.  Check userid and password.\n\n")
                         is_telnet = False
                     else:
                         # login successful
                         self.fifo = deque()
                 else:
                     # Anything else, telnet server is not running
-                    logging.error("\n>>>>>\tERROR: Telnet Connection Refused.\n\n")
+                    logging.error("\n\tERROR: Telnet Connection Refused.\n\n")
                     is_telnet = False
             else:
                 is_telnet = False
