diff --git a/src/test/cluster/clusterTest.py b/src/test/cluster/clusterTest.py
index a694bad..64ae73f 100644
--- a/src/test/cluster/clusterTest.py
+++ b/src/test/cluster/clusterTest.py
@@ -388,6 +388,11 @@
             except:
                 time.sleep(5)
                 continue
+
+            #first archive the test case logs for this run
+            CordLogger.archive_results('test_cluster_controller_restarts',
+                                       controllers = controllers,
+                                       iteration = 'iteration_{}'.format(num+1))
             next_controller = check_exception(controller = controller)
 
     def test_cluster_single_controller_restarts(self):
@@ -457,6 +462,10 @@
             log.info('Restarting back the controller %s' %controller_name)
             cord_test_onos_restart(node = controller_name)
             time.sleep(60)
+            #archive the logs for this run
+            CordLogger.archive_results('test_cluster_single_controller_restarts',
+                                       controllers = controllers,
+                                       iteration = 'iteration_{}'.format(num+1))
             check_exception(controller, inclusive = True)
 
     def test_cluster_restarts(self):
@@ -510,6 +519,11 @@
             except:
                 time.sleep(10)
                 continue
+
+            #archive the logs for this run before verification
+            CordLogger.archive_results('test_cluster_restarts',
+                                       controllers = controllers,
+                                       iteration = 'iteration_{}'.format(num+1))
             #check for exceptions on the adjacent nodes
             check_exception()
 
diff --git a/src/test/utils/CordLogger.py b/src/test/utils/CordLogger.py
index 081e33c..51c7dc8 100644
--- a/src/test/utils/CordLogger.py
+++ b/src/test/utils/CordLogger.py
@@ -12,6 +12,8 @@
     onosLogLevel = 'INFO'
     curLogLevel = onosLogLevel
     testLogLevel = os.getenv('LOG_LEVEL', onosLogLevel)
+    setup_dir = os.path.join( os.path.dirname(os.path.realpath(__file__)), '../setup')
+    archive_dir = os.path.join(setup_dir, 'test_logs')
 
     @classmethod
     def cliSessionEnter(cls):
@@ -61,6 +63,42 @@
             else:
                 log.info('\nTest %s has no errors and warnings in the logs' %self._testMethodName)
         except: pass
+        try:
+            self.archive_results(self._testMethodName)
+        except: pass
+
+    @classmethod
+    def archive_results(cls, testName, controllers = None, iteration = None, cache_result = False):
+        log_map = {}
+        if controllers is None:
+            controllers = cls.controllers
+        else:
+            if type(controllers) in [ str, unicode ]:
+                controllers = [ controllers ]
+        try:
+            for controller in controllers:
+                onosLog = OnosLog(host = controller)
+                st, output = onosLog.get_log(cache_result = cache_result)
+                log_map[controller] = (st, output)
+        except:
+            return
+
+        if not os.path.exists(cls.archive_dir):
+            os.mkdir(cls.archive_dir)
+        for controller, results in log_map.items():
+            st, output = results
+            if st and output:
+                iteration_str = '' if iteration is None else '_{}'.format(iteration)
+                archive_file = os.path.join(cls.archive_dir,
+                                            'logs_{}_{}{}'.format(controller, testName, iteration_str))
+                archive_cmd = 'gzip -9 -f {}'.format(archive_file)
+                if os.access(archive_file, os.F_OK):
+                    os.unlink(archive_file)
+                with open(archive_file, 'w') as fd:
+                    fd.write(output)
+                try:
+                    os.system(archive_cmd)
+                except: pass
 
     @classmethod
     def logSet(cls, level = None, app = 'org.onosproject', controllers = None, forced = False):
diff --git a/src/test/utils/OnosLog.py b/src/test/utils/OnosLog.py
index f5dcb77..a5e0fa7 100644
--- a/src/test/utils/OnosLog.py
+++ b/src/test/utils/OnosLog.py
@@ -25,7 +25,7 @@
     def update_last_snapshot(cls, host, res):
         cls.last_snapshot_map[host] = res
 
-    def get_log(self, search_terms = None, exception = True):
+    def get_log(self, search_terms = None, exception = True, cache_result = True):
         """Run the command on the test host"""
         cmd = 'cat /root/onos/apache-karaf-3.0.5/data/log/karaf.log'
         st, output = self.ssh_agent.run_cmd(cmd)
@@ -56,7 +56,8 @@
             output += '\n'.join(exception_map['Exception'])
 
         #update the last snapshot
-        self.update_last_snapshot(self.ssh_agent.host, lines)
+        if cache_result is True:
+            self.update_last_snapshot(self.ssh_agent.host, lines)
         return st, output
 
     def search_log_pattern(self, pattern):
