diff --git a/src/test/utils/CordLogger.py b/src/test/utils/CordLogger.py
index 5f38c8c..081e33c 100644
--- a/src/test/utils/CordLogger.py
+++ b/src/test/utils/CordLogger.py
@@ -1,11 +1,48 @@
 from OnosLog import OnosLog
 from scapy.all import log
+from onosclidriver import OnosCliDriver
 import unittest
+import os
+import time
 
 class CordLogger(unittest.TestCase):
 
+    controllers = os.getenv('ONOS_CONTROLLER_IP', '').split(',')
+    cliSessions = {}
+    onosLogLevel = 'INFO'
+    curLogLevel = onosLogLevel
+    testLogLevel = os.getenv('LOG_LEVEL', onosLogLevel)
+
+    @classmethod
+    def cliSessionEnter(cls):
+        try:
+            for controller in cls.controllers:
+                if not controller:
+                    continue
+                retries = 0
+                while retries < 3:
+                    cli = OnosCliDriver(controller = controller, connect = True)
+                    if cli.handle:
+                        cls.cliSessions[controller] = cli
+                        break
+                    else:
+                        retries += 1
+                        time.sleep(2)
+        except:
+            pass
+
+    @classmethod
+    def cliSessionExit(cls):
+        try:
+            for controller, cli in cls.cliSessions.items():
+                if cli:
+                    cli.disconnect()
+        except:
+            pass
+
     def setUp(self):
         '''Read the log buffer'''
+        self.logSet()
         try:
             onosLog = OnosLog()
             st, output = onosLog.get_log()
@@ -13,6 +50,8 @@
 
     def tearDown(self):
         '''Dump the log buffer for ERRORS/warnings'''
+        #reset the log level back to default log level after a test
+        self.logSet(level = self.onosLogLevel)
         try:
             onosLog = OnosLog()
             st, output = onosLog.get_log( ('ERROR','WARN') )
@@ -22,3 +61,26 @@
             else:
                 log.info('\nTest %s has no errors and warnings in the logs' %self._testMethodName)
         except: pass
+
+    @classmethod
+    def logSet(cls, level = None, app = 'org.onosproject', controllers = None, forced = False):
+        #explicit override of level is allowed to reset log levels
+        if level is None:
+            level = cls.testLogLevel
+        #if we are already at current/ONOS log level, there is nothing to do
+        if forced is False and level == cls.curLogLevel:
+            return
+        if controllers is None:
+            controllers = cls.controllers
+        else:
+            if type(controllers) in [str, unicode]:
+                controllers = [ controllers ]
+        cls.cliSessionEnter()
+        try:
+            for controller in controllers:
+                if cls.cliSessions.has_key(controller):
+                    cls.cliSessions[controller].logSet(level = level, app = app)
+            cls.curLogLevel = level
+        except:
+            pass
+        cls.cliSessionExit()
diff --git a/src/test/utils/__init__.py b/src/test/utils/__init__.py
index 714a2b8..c34e915 100644
--- a/src/test/utils/__init__.py
+++ b/src/test/utils/__init__.py
@@ -1,12 +1,12 @@
-# 
+#
 # Copyright 2016-present Ciena 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.
@@ -17,4 +17,6 @@
 ##add the python path to lookup the utils
 working_dir = os.path.dirname(os.path.realpath(sys.argv[-1]))
 utils_dir = os.path.join(working_dir, '../fsm')
+cli_dir = os.path.join(working_dir, '../cli')
 __path__.append(utils_dir)
+__path__.append(cli_dir)
