diff --git a/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu.py b/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu.py
index 1e640b2..200fd5b 100644
--- a/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu.py
+++ b/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu.py
@@ -170,7 +170,7 @@
         :param device: A Voltha.Device object.
         :return: Will return result of self test
         """
-        log.info('self-test-device', device=device.id)
+        log.info('self-test-device - Not implemented yet', device=device.id)
         raise NotImplementedError()
 
     def delete_device(self, device):
@@ -201,10 +201,10 @@
         raise NotImplementedError()
 
     def send_proxied_message(self, proxy_address, msg):
-        log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)
+        log.debug('send-proxied-message', proxy_address=proxy_address, msg=msg)
 
     def receive_proxied_message(self, proxy_address, msg):
-        log.info('receive-proxied-message', proxy_address=proxy_address,
+        log.debug('receive-proxied-message', proxy_address=proxy_address,
                  device_id=proxy_address.device_id, msg=hexify(msg))
         # Device_id from the proxy_address is the olt device id. We need to
         # get the onu device id using the port number in the proxy_address
@@ -219,7 +219,7 @@
                  egress_port_no=egress_port_no, msg_len=len(msg))
 
     def receive_inter_adapter_message(self, msg):
-        log.info('receive_inter_adapter_message', msg=msg)
+        log.debug('receive_inter_adapter_message', msg=msg)
         proxy_address = msg['proxy_address']
         assert proxy_address is not None
         # Device_id from the proxy_address is the olt device id. We need to
@@ -233,21 +233,21 @@
             log.error("device-not-found")
 
     def create_interface(self, device, data):
-        log.info('create-interface', device_id=device.id)
+        log.debug('create-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.create_interface(data)
 
     def update_interface(self, device, data):
-        log.info('update-interface', device_id=device.id)
+        log.debug('update-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.update_interface(data)
 
     def remove_interface(self, device, data):
-        log.info('remove-interface', device_id=device.id)
+        log.debug('remove-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -257,7 +257,7 @@
         raise NotImplementedError()
 
     def create_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('create-tcont', device_id=device.id)
+        log.debug('create-tcont', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -267,14 +267,14 @@
         raise NotImplementedError()
 
     def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('remove-tcont', device_id=device.id)
+        log.debug('remove-tcont', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.remove_tcont(tcont_data, traffic_descriptor_data)
 
     def create_gemport(self, device, data):
-        log.info('create-gemport', device_id=device.id)
+        log.debug('create-gemport', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -284,14 +284,14 @@
         raise NotImplementedError()
 
     def remove_gemport(self, device, data):
-        log.info('remove-gemport', device_id=device.id)
+        log.debug('remove-gemport', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.remove_gemport(data)
 
     def create_multicast_gemport(self, device, data):
-        log.info('create-multicast-gemport', device_id=device.id)
+        log.debug('create-multicast-gemport', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
diff --git a/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py b/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
index f825e5c..8c97f5c 100644
--- a/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
+++ b/voltha/adapters/brcm_openomci_onu/brcm_openomci_onu_handler.py
@@ -245,7 +245,7 @@
 
     def delete(self, device):
         self.log.debug('function-entry', device=device)
-        self.log.info('delete-onu')
+        self.log.info('delete-onu - Not implemented yet')
         # The device is already deleted in delete_v_ont_ani(). No more
         # handling needed here
 
@@ -277,70 +277,70 @@
             _push_tpid = None
             _field = None
             _set_vlan_vid = None
-            self.log.info('bulk-flow-update', device_id=device.id, flow=flow)
+            self.log.debug('bulk-flow-update', device_id=device.id, flow=flow)
             try:
                 _in_port = fd.get_in_port(flow)
                 assert _in_port is not None
 
                 if is_downstream(_in_port):
-                    self.log.info('downstream-flow')
+                    self.log.debug('downstream-flow')
                 elif is_upstream(_in_port):
-                    self.log.info('upstream-flow')
+                    self.log.debug('upstream-flow')
                 else:
                     raise Exception('port should be 1 or 2 by our convention')
 
                 _out_port = fd.get_out_port(flow)  # may be None
-                self.log.info('out-port', out_port=_out_port)
+                self.log.debug('out-port', out_port=_out_port)
 
                 for field in fd.get_ofb_fields(flow):
                     if field.type == fd.ETH_TYPE:
                         _type = field.eth_type
-                        self.log.info('field-type-eth-type',
+                        self.log.debug('field-type-eth-type',
                                       eth_type=_type)
 
                     elif field.type == fd.IP_PROTO:
                         _proto = field.ip_proto
-                        self.log.info('field-type-ip-proto',
+                        self.log.debug('field-type-ip-proto',
                                       ip_proto=_proto)
 
                     elif field.type == fd.IN_PORT:
                         _port = field.port
-                        self.log.info('field-type-in-port',
+                        self.log.debug('field-type-in-port',
                                       in_port=_port)
 
                     elif field.type == fd.VLAN_VID:
                         _vlan_vid = field.vlan_vid & 0xfff
-                        self.log.info('field-type-vlan-vid',
+                        self.log.debug('field-type-vlan-vid',
                                       vlan=_vlan_vid)
 
                     elif field.type == fd.VLAN_PCP:
                         _vlan_pcp = field.vlan_pcp
-                        self.log.info('field-type-vlan-pcp',
+                        self.log.debug('field-type-vlan-pcp',
                                       pcp=_vlan_pcp)
 
                     elif field.type == fd.UDP_DST:
                         _udp_dst = field.udp_dst
-                        self.log.info('field-type-udp-dst',
+                        self.log.debug('field-type-udp-dst',
                                       udp_dst=_udp_dst)
 
                     elif field.type == fd.UDP_SRC:
                         _udp_src = field.udp_src
-                        self.log.info('field-type-udp-src',
+                        self.log.debug('field-type-udp-src',
                                       udp_src=_udp_src)
 
                     elif field.type == fd.IPV4_DST:
                         _ipv4_dst = field.ipv4_dst
-                        self.log.info('field-type-ipv4-dst',
+                        self.log.debug('field-type-ipv4-dst',
                                       ipv4_dst=_ipv4_dst)
 
                     elif field.type == fd.IPV4_SRC:
                         _ipv4_src = field.ipv4_src
-                        self.log.info('field-type-ipv4-src',
+                        self.log.debug('field-type-ipv4-src',
                                       ipv4_dst=_ipv4_src)
 
                     elif field.type == fd.METADATA:
                         _metadata = field.table_metadata
-                        self.log.info('field-type-metadata',
+                        self.log.debug('field-type-metadata',
                                       metadata=_metadata)
 
                     else:
@@ -351,16 +351,16 @@
 
                     if action.type == fd.OUTPUT:
                         _output = action.output.port
-                        self.log.info('action-type-output',
+                        self.log.debug('action-type-output',
                                       output=_output, in_port=_in_port)
 
                     elif action.type == fd.POP_VLAN:
-                        self.log.info('action-type-pop-vlan',
+                        self.log.debug('action-type-pop-vlan',
                                       in_port=_in_port)
 
                     elif action.type == fd.PUSH_VLAN:
                         _push_tpid = action.push.ethertype
-                        self.log.info('action-type-push-vlan',
+                        self.log.debug('action-type-push-vlan',
                                  push_tpid=_push_tpid, in_port=_in_port)
                         if action.push.ethertype != 0x8100:
                             self.log.error('unhandled-tpid',
@@ -370,11 +370,11 @@
                         _field = action.set_field.field.ofb_field
                         assert (action.set_field.field.oxm_class ==
                                 OFPXMC_OPENFLOW_BASIC)
-                        self.log.info('action-type-set-field',
+                        self.log.debug('action-type-set-field',
                                       field=_field, in_port=_in_port)
                         if _field.type == fd.VLAN_VID:
                             _set_vlan_vid = _field.vlan_vid & 0xfff
-                            self.log.info('set-field-type-valn-vid', _set_vlan_vid)
+                            self.log.debug('set-field-type-valn-vid', _set_vlan_vid)
                         else:
                             self.log.error('unsupported-action-set-field-type',
                                            field_type=_field.type)
@@ -521,8 +521,7 @@
             self.log.info('not-handled-yet')
 
     def create_gemport(self, data):
-        self.log.debug('function-entry', data=data)
-        self.log.info('create-gemport')
+        self.log.debug('create-gemport', data=data)
         gem_portdata = GemportsConfigData()
         gem_portdata.CopyFrom(data)
 
@@ -545,8 +544,7 @@
 
     @inlineCallbacks
     def remove_gemport(self, data):
-        self.log.debug('function-entry', data=data)
-        self.log.info('remove-gemport')
+        self.log.debug('remove-gemport', data=data)
         gem_port = GemportsConfigData()
         gem_port.CopyFrom(data)
         device = self.adapter_agent.get_device(self.device_id)
@@ -559,8 +557,7 @@
 
 
     def create_tcont(self, tcont_data, traffic_descriptor_data):
-        self.log.debug('function-entry', tcont_data=tcont_data, traffic_descriptor_data=traffic_descriptor_data)
-        self.log.info('create-tcont')
+        self.log.debug('create-tcont', tcont_data=tcont_data, traffic_descriptor_data=traffic_descriptor_data)
         tcontdata = TcontsConfigData()
         tcontdata.CopyFrom(tcont_data)
 
@@ -589,12 +586,11 @@
         if tcontdata.interface_reference is not None:
             self.log.debug('tcont', tcont=tcont.alloc_id)
         else:
-            self.log.info('recevied-null-tcont-data', tcont=tcont.alloc_id)
+            self.log.info('received-null-tcont-data', tcont=tcont.alloc_id)
 
     @inlineCallbacks
     def remove_tcont(self, tcont_data, traffic_descriptor_data):
-        self.log.debug('function-entry', tcont_data=tcont_data, traffic_descriptor_data=traffic_descriptor_data)
-        self.log.info('remove-tcont')
+        self.log.debug('remove-tcont', tcont_data=tcont_data, traffic_descriptor_data=traffic_descriptor_data)
         device = self.adapter_agent.get_device(self.device_id)
         if device.connect_status != ConnectStatus.REACHABLE:
             self.log.error('device-unreachable')
@@ -671,7 +667,6 @@
 
     @inlineCallbacks
     def reboot(self):
-        self.log.debug('function-entry')
         self.log.info('reboot-device')
         device = self.adapter_agent.get_device(self.device_id)
         if device.connect_status != ConnectStatus.REACHABLE:
@@ -685,7 +680,7 @@
             omci_response = response.getfieldval("omci_message")
             success_code = omci_response.getfieldval("success_code")
             if success_code == 0:
-                self.log.info("reboot-command-processed-successfully")
+                self.log.debug("reboot-command-processed-successfully")
                 # Update the device connection and operation status
                 device = self.adapter_agent.get_device(self.device_id)
                 device.connect_status = ConnectStatus.UNREACHABLE
@@ -693,13 +688,13 @@
                 self.adapter_agent.update_device(device)
                 self.disable_ports(device)
             else:
-                self.log.info("reboot-failed", success_code=success_code)
+                self.log.error("reboot-failed", success_code=success_code)
         else:
-            self.log.info("error-in-processing-reboot-response")
+            self.log.error("error-in-processing-reboot-response")
 
     def disable_ports(self, onu_device):
-        self.log.debug('function-entry', onu_device=onu_device)
-        self.log.info('disable-ports', device_id=self.device_id)
+        self.log.info('disable-ports', device_id=self.device_id,
+                   onu_device=onu_device)
 
         # Disable all ports on that device
         self.adapter_agent.disable_all_ports(self.device_id)
@@ -715,8 +710,7 @@
             self.update_logical_port(logical_device_id, port_id, OFPPS_LINK_DOWN)
 
     def enable_ports(self, onu_device):
-        self.log.debug('function-entry', onu_device=onu_device)
-        self.log.info('enable-ports', device_id=self.device_id)
+        self.log.info('enable-ports', device_id=self.device_id, onu_device=onu_device)
 
         # Disable all ports on that device
         self.adapter_agent.enable_all_ports(self.device_id)
@@ -903,13 +897,11 @@
                 self._in_sync_reached = True
 
                 def success(_results):
-                    self.log.debug('function-entry', _results=_results)
-                    self.log.info('mib-download-success')
+                    self.log.info('mib-download-success', _results=_results)
                     self._mib_download_task = None
 
                 def failure(_reason):
-                    self.log.debug('function-entry', _reason=_reason)
-                    self.log.info('mib-download-failure')
+                    self.log.info('mib-download-failure', _reason=_reason)
                     self._deferred = reactor.callLater(10, self._mib_download_task)
 
                 self._mib_download_task = BrcmMibDownloadTask(self.omci_agent, self)
diff --git a/voltha/adapters/broadcom_onu/broadcom_onu.py b/voltha/adapters/broadcom_onu/broadcom_onu.py
index 6e17c8c..9618ee7 100644
--- a/voltha/adapters/broadcom_onu/broadcom_onu.py
+++ b/voltha/adapters/broadcom_onu/broadcom_onu.py
@@ -118,6 +118,7 @@
         reactor.callLater(0, self.devices_handlers[device.id].reconcile, device)
 
     def abandon_device(self, device):
+        log.info('abadon-device - Not implemented')
         raise NotImplementedError()
 
     def disable_device(self, device):
@@ -162,7 +163,7 @@
         :param device: A Voltha.Device object.
         :return: Will return result of self test
         """
-        log.info('self-test-device', device=device.id)
+        log.info('self-test-device - Not implemented', device=device.id)
         raise NotImplementedError()
 
     def delete_device(self, device):
@@ -196,10 +197,10 @@
         raise NotImplementedError()
 
     def send_proxied_message(self, proxy_address, msg):
-        log.info('send-proxied-message', proxy_address=proxy_address, msg=msg)
+        log.debug('send-proxied-message', proxy_address=proxy_address, msg=msg)
 
     def receive_proxied_message(self, proxy_address, msg):
-        log.info('receive-proxied-message', proxy_address=proxy_address,
+        log.debug('receive-proxied-message', proxy_address=proxy_address,
                  device_id=proxy_address.device_id, msg=hexify(msg))
         # Device_id from the proxy_address is the olt device id. We need to
         # get the onu device id using the port number in the proxy_address
@@ -214,7 +215,7 @@
                  egress_port_no=egress_port_no, msg_len=len(msg))
 
     def receive_inter_adapter_message(self, msg):
-        log.info('receive_inter_adapter_message', msg=msg)
+        log.debug('receive_inter_adapter_message', msg=msg)
         proxy_address = msg['proxy_address']
         assert proxy_address is not None
         # Device_id from the proxy_address is the olt device id. We need to
@@ -228,21 +229,21 @@
             log.error("device-not-found")
 
     def create_interface(self, device, data):
-        log.info('create-interface', device_id=device.id)
+        log.debug('create-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.create_interface(data)
 
     def update_interface(self, device, data):
-        log.info('update-interface', device_id=device.id)
+        log.debug('update-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.update_interface(data)
 
     def remove_interface(self, device, data):
-        log.info('remove-interface', device_id=device.id)
+        log.debug('remove-interface', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -252,7 +253,7 @@
         raise NotImplementedError()
 
     def create_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('create-tcont', device_id=device.id)
+        log.debug('create-tcont', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -262,14 +263,14 @@
         raise NotImplementedError()
 
     def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('remove-tcont', device_id=device.id)
+        log.debug('remove-tcont', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.remove_tcont(tcont_data, traffic_descriptor_data)
 
     def create_gemport(self, device, data):
-        log.info('create-gemport', device_id=device.id)
+        log.debug('create-gemport', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -279,14 +280,14 @@
         raise NotImplementedError()
 
     def remove_gemport(self, device, data):
-        log.info('remove-gemport', device_id=device.id)
+        log.debug('remove-gemport', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
                 handler.remove_gemport(data)
 
     def create_multicast_gemport(self, device, data):
-        log.info('create-multicast-gemport', device_id=device.id)
+        log.debug('create-multicast-gemport', device_id=device.id)
         if device.id in self.devices_handlers:
             handler = self.devices_handlers[device.id]
             if handler is not None:
@@ -466,10 +467,12 @@
         device = self.adapter_agent.get_device(device.id)
         device.oper_status = OperStatus.DISCOVERED
         self.adapter_agent.update_device(device)
+        self.log.info('activated')
+
 
     def reconcile(self, device):
 
-        self.log.info('reconciling-broadcom-onu-device-starts')
+        self.log.debug('reconciling-broadcom-onu-device-starts')
 
         # first we verify that we got parent reference and proxy info
         assert device.parent_id
@@ -486,7 +489,7 @@
 
     def update_logical_port(self, logical_device_id, port_id, state):
         try:
-            self.log.info('updating-logical-port', logical_port_id=port_id,
+            self.log.debug('updating-logical-port', logical_port_id=port_id,
                           logical_device_id=logical_device_id, state=state)
             logical_port = self.adapter_agent.get_logical_port(logical_device_id,
                                                                port_id)
@@ -503,7 +506,7 @@
         parent_device = self.adapter_agent.get_device(device.parent_id)
         if parent_device.type == 'openolt':
             parent_adapter = registry('adapter_loader').get_agent(parent_device.adapter).adapter
-            self.log.info('parent-adapter-delete-onu', onu_device=device,
+            self.log.debug('parent-adapter-delete-onu', onu_device=device,
                           parent_device=parent_device,
                           parent_adapter=parent_adapter)
             try:
@@ -538,70 +541,70 @@
             _push_tpid = None
             _field = None
             _set_vlan_vid = None
-            self.log.info('bulk-flow-update', device_id=device.id, flow=flow)
+            self.log.debug('bulk-flow-update', device_id=device.id, flow=flow)
             try:
                 _in_port = fd.get_in_port(flow)
                 assert _in_port is not None
 
                 if is_downstream(_in_port):
-                    self.log.info('downstream-flow')
+                    self.log.debug('downstream-flow')
                 elif is_upstream(_in_port):
-                    self.log.info('upstream-flow')
+                    self.log.debug('upstream-flow')
                 else:
                     raise Exception('port should be 1 or 2 by our convention')
 
                 _out_port = fd.get_out_port(flow)  # may be None
-                self.log.info('out-port', out_port=_out_port)
+                self.log.debug('out-port', out_port=_out_port)
 
                 for field in fd.get_ofb_fields(flow):
                     if field.type == fd.ETH_TYPE:
                         _type = field.eth_type
-                        self.log.info('field-type-eth-type',
+                        self.log.debug('field-type-eth-type',
                                       eth_type=_type)
 
                     elif field.type == fd.IP_PROTO:
                         _proto = field.ip_proto
-                        self.log.info('field-type-ip-proto',
+                        self.log.debug('field-type-ip-proto',
                                       ip_proto=_proto)
 
                     elif field.type == fd.IN_PORT:
                         _port = field.port
-                        self.log.info('field-type-in-port',
+                        self.log.debug('field-type-in-port',
                                       in_port=_port)
 
                     elif field.type == fd.VLAN_VID:
                         _vlan_vid = field.vlan_vid & 0xfff
-                        self.log.info('field-type-vlan-vid',
+                        self.log.debug('field-type-vlan-vid',
                                       vlan=_vlan_vid)
 
                     elif field.type == fd.VLAN_PCP:
                         _vlan_pcp = field.vlan_pcp
-                        self.log.info('field-type-vlan-pcp',
+                        self.log.debug('field-type-vlan-pcp',
                                       pcp=_vlan_pcp)
 
                     elif field.type == fd.UDP_DST:
                         _udp_dst = field.udp_dst
-                        self.log.info('field-type-udp-dst',
+                        self.log.debug('field-type-udp-dst',
                                       udp_dst=_udp_dst)
 
                     elif field.type == fd.UDP_SRC:
                         _udp_src = field.udp_src
-                        self.log.info('field-type-udp-src',
+                        self.log.debug('field-type-udp-src',
                                       udp_src=_udp_src)
 
                     elif field.type == fd.IPV4_DST:
                         _ipv4_dst = field.ipv4_dst
-                        self.log.info('field-type-ipv4-dst',
+                        self.log.debug('field-type-ipv4-dst',
                                       ipv4_dst=_ipv4_dst)
 
                     elif field.type == fd.IPV4_SRC:
                         _ipv4_src = field.ipv4_src
-                        self.log.info('field-type-ipv4-src',
+                        self.log.debug('field-type-ipv4-src',
                                       ipv4_dst=_ipv4_src)
 
                     elif field.type == fd.METADATA:
                         _metadata = field.table_metadata
-                        self.log.info('field-type-metadata',
+                        self.log.debug('field-type-metadata',
                                       metadata=_metadata)
 
                     else:
@@ -612,16 +615,16 @@
 
                     if action.type == fd.OUTPUT:
                         _output = action.output.port
-                        self.log.info('action-type-output',
+                        self.log.debug('action-type-output',
                                       output=_output, in_port=_in_port)
 
                     elif action.type == fd.POP_VLAN:
-                        self.log.info('action-type-pop-vlan',
+                        self.log.debug('action-type-pop-vlan',
                                       in_port=_in_port)
 
                     elif action.type == fd.PUSH_VLAN:
                         _push_tpid = action.push.ethertype
-                        self.log.info('action-type-push-vlan',
+                        self.log.debug('action-type-push-vlan',
                                  push_tpid=_push_tpid, in_port=_in_port)
                         if action.push.ethertype != 0x8100:
                             self.log.error('unhandled-tpid',
@@ -631,11 +634,11 @@
                         _field = action.set_field.field.ofb_field
                         assert (action.set_field.field.oxm_class ==
                                 OFPXMC_OPENFLOW_BASIC)
-                        self.log.info('action-type-set-field',
+                        self.log.debug('action-type-set-field',
                                       field=_field, in_port=_in_port)
                         if _field.type == fd.VLAN_VID:
                             _set_vlan_vid = _field.vlan_vid & 0xfff
-                            self.log.info('set-field-type-valn-vid', _set_vlan_vid)
+                            self.log.debug('set-field-type-valn-vid', _set_vlan_vid)
                         else:
                             self.log.error('unsupported-action-set-field-type',
                                            field_type=_field.type)
@@ -690,12 +693,12 @@
 
     def send_omci_message(self, frame):
         _frame = hexify(str(frame))
-        self.log.info('send-omci-message-%s' % _frame)
+        self.log.debug('send-omci-message-%s' % _frame)
         device = self.adapter_agent.get_device(self.device_id)
         try:
             self.adapter_agent.send_proxied_message(device.proxy_address, _frame)
         except Exception as e:
-            self.log.info('send-omci-message-exception', exc=str(e))
+            self.log.warn('send-omci-message-exception', exc=str(e))
 
     def send_get_circuit_pack(self, entity_id=0):
         frame = OmciFrame(
@@ -1367,10 +1370,10 @@
 
     @inlineCallbacks
     def wait_for_response(self):
-        self.log.info('wait-for-response')
+        self.log.debug('wait-for-response')
         try:
             response = yield self.incoming_messages.get()
-            self.log.info('got-response')
+            self.log.debug('got-response')
             resp = OmciFrame(response)
             resp.show()
             returnValue(resp)
@@ -1537,7 +1540,7 @@
 
     def del_uni_port(self, device, parent_logical_device_id,
                      name, parent_port_num=None):
-        self.log.info('del-uni-port', device_id=device.id,
+        self.log.debug('del-uni-port', device_id=device.id,
                       logical_device_id=parent_logical_device_id,
                       name=name)
         if parent_port_num is not None:
@@ -1655,7 +1658,7 @@
 
     @inlineCallbacks
     def create_gemport(self, data):
-        self.log.info('create-gemport')
+        self.log.debug('create-gemport')
         gem_port = GemportsConfigData()
         gem_port.CopyFrom(data)
         if gem_port.tcont_ref is None:
@@ -1685,7 +1688,7 @@
 
     @inlineCallbacks
     def remove_gemport(self, data):
-        self.log.info('remove-gemport')
+        self.log.debug('remove-gemport')
         gem_port = GemportsConfigData()
         gem_port.CopyFrom(data)
         device = self.adapter_agent.get_device(self.device_id)
@@ -1708,7 +1711,7 @@
 
     @inlineCallbacks
     def create_tcont(self, tcont_data, traffic_descriptor_data):
-        self.log.info('create-tcont')
+        self.log.debug('create-tcont')
         tcont = TcontsConfigData()
         tcont.CopyFrom(tcont_data)
         if tcont.interface_reference is not None:
@@ -1720,7 +1723,7 @@
 
     @inlineCallbacks
     def remove_tcont(self, tcont_data, traffic_descriptor_data):
-        self.log.info('remove-tcont')
+        self.log.debug('remove-tcont')
         device = self.adapter_agent.get_device(self.device_id)
         if device.connect_status != ConnectStatus.REACHABLE:
             self.log.error('device-unreachable')
@@ -1730,7 +1733,7 @@
         yield self.wait_for_response()
 
     def create_multicast_gemport(self, data):
-        self.log.info('Send relevant OMCI message')
+        self.log.info('Send relevant OMCI message - Not implemented yet')
 
     @inlineCallbacks
     def disable(self, device):
@@ -1788,7 +1791,7 @@
                 omci_response = response.getfieldval("omci_message")
                 success_code = omci_response.getfieldval("success_code")
                 if success_code == 0:
-                    self.log.info("reboot-command-processed-successfully")
+                    self.log.debug("reboot-command-processed-successfully")
                     # Update the device connection and operation status
                     device = self.adapter_agent.get_device(self.device_id)
                     device.connect_status = ConnectStatus.UNREACHABLE
@@ -1796,11 +1799,11 @@
                     self.adapter_agent.update_device(device)
                     self.disable_ports(device)
                 else:
-                    self.log.info("reboot-failed", success_code=success_code)
+                    self.log.error("reboot-failed", success_code=success_code)
             else:
-                self.log.info("error-in-processing-reboot-response")
+                self.log.error("error-in-processing-reboot-response")
         except Exception as e:
-            self.log.info('wait-for-response-exception', exc=str(e))
+            self.log.error('wait-for-response-exception', exc=str(e))
 
     def disable_ports(self, device):
         self.log.info('disable-ports', device_id=self.device_id)
diff --git a/voltha/adapters/openolt/openolt.py b/voltha/adapters/openolt/openolt.py
index 93be301..634040d 100644
--- a/voltha/adapters/openolt/openolt.py
+++ b/voltha/adapters/openolt/openolt.py
@@ -145,27 +145,32 @@
         handler.reboot()
 
     def download_image(self, device, request):
-        log.info('image_download', device=device, request=request)
+        log.info('image_download - Not implemented yet', device=device,
+                 request=request)
         raise NotImplementedError()
 
     def get_image_download_status(self, device, request):
-        log.info('get_image_download', device=device, request=request)
+        log.info('get_image_download - Not implemented yet', device=device,
+                 request=request)
         raise NotImplementedError()
 
     def cancel_image_download(self, device, request):
-        log.info('cancel_image_download', device=device)
+        log.info('cancel_image_download - Not implemented yet', device=device)
         raise NotImplementedError()
 
     def activate_image_update(self, device, request):
-        log.info('activate_image_update', device=device, request=request)
+        log.info('activate_image_update - Not implemented yet',
+                 device=device, request=request)
         raise NotImplementedError()
 
     def revert_image_update(self, device, request):
-        log.info('revert_image_update', device=device, request=request)
+        log.info('revert_image_update - Not implemented yet',
+                 device=device, request=request)
         raise NotImplementedError()
 
     def self_test_device(self, device):
         # from voltha.protos.voltha_pb2 import SelfTestResponse
+        log.info('Not implemented yet')
         raise NotImplementedError()
 
     def delete_device(self, device):
@@ -180,7 +185,9 @@
 
     def update_flows_bulk(self, device, flows, groups):
         log.info('bulk-flow-update', device_id=device.id,
-                 flows=flows, groups=groups)
+                 number_of_flows=len(flows.items), number_of_groups=len(
+                groups.items))
+        log.debug('flows and grousp details', flows=flows, groups=groups)
         assert len(groups.items) == 0, "Cannot yet deal with groups"
         handler = self.devices[device.id]
         return handler.update_flow_table(flows.items)
@@ -188,10 +195,13 @@
     def update_flows_incrementally(self, device, flow_changes, group_changes):
         log.debug('update_flows_incrementally', device=device,
                   flow_changes=flow_changes, group_changes=group_changes)
+        log.info('This device does not allow this, therefore it is Not '
+                 'implemented')
         raise NotImplementedError()
 
     def update_pm_config(self, device, pm_configs):
-        log.debug('update_pm_config', device=device, pm_configs=pm_configs)
+        log.info('update_pm_config - Not implemented yet', device=device,
+                  pm_configs=pm_configs)
         raise NotImplementedError()
 
     def send_proxied_message(self, proxy_address, msg):
@@ -200,7 +210,8 @@
         handler.send_proxied_message(proxy_address, msg)
 
     def receive_proxied_message(self, proxy_address, msg):
-        log.debug('receive_proxied_message', proxy_address=proxy_address,
+        log.debug('receive_proxied_message - Not implemented',
+                  proxy_address=proxy_address,
                   msg=msg)
         raise NotImplementedError()
 
@@ -221,92 +232,110 @@
         handler.packet_out(egress_port_no, msg)
 
     def receive_inter_adapter_message(self, msg):
-        log.info('rx_inter_adapter_msg')
+        log.info('rx_inter_adapter_msg - Not implemented')
         raise NotImplementedError()
 
     def suppress_alarm(self, filter):
-        log.info('suppress_alarm', filter=filter)
+        log.info('suppress_alarm - Not implemented yet', filter=filter)
         raise NotImplementedError()
 
     def unsuppress_alarm(self, filter):
-        log.info('unsuppress_alarm', filter=filter)
+        log.info('unsuppress_alarm - Not implemented yet', filter=filter)
         raise NotImplementedError()
 
     # PON Mgnt APIs #
     def create_interface(self, device, data):
-        log.debug('create-interface', data=data)
+        log.debug('create-interface - Not implemented - We do not use this',
+                  data=data)
         raise NotImplementedError()
 
     def update_interface(self, device, data):
-        log.debug('update-interface', data=data)
+        log.debug('update-interface - Not implemented - We do not use this',
+                  data=data)
         raise NotImplementedError()
 
     def remove_interface(self, device, data):
-        log.debug('remove-interface', data=data)
+        log.debug('remove-interface - Not implemented - We do not use this',
+                  data=data)
         raise NotImplementedError()
 
     def receive_onu_detect_state(self, proxy_address, state):
-        log.debug('receive-onu-detect-state', proxy_address=proxy_address,
+        log.debug('receive-onu-detect-state - Not implemented - We do not '
+                  'use this', proxy_address=proxy_address,
                   state=state)
         raise NotImplementedError()
 
     def create_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('create-tcont', tcont_data=tcont_data,
+        log.info('create-tcont - Not implemented - We do not use this',
+                 tcont_data=tcont_data,
                  traffic_descriptor_data=traffic_descriptor_data)
         raise NotImplementedError()
 
     def update_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('update-tcont', tcont_data=tcont_data,
+        log.info('update-tcont - Not implemented - We do not use this',
+                 tcont_data=tcont_data,
                  traffic_descriptor_data=traffic_descriptor_data)
         raise NotImplementedError()
 
     def remove_tcont(self, device, tcont_data, traffic_descriptor_data):
-        log.info('remove-tcont', tcont_data=tcont_data,
+        log.info('remove-tcont - Not implemented - We do not use this',
+                 tcont_data=tcont_data,
                  traffic_descriptor_data=traffic_descriptor_data)
         raise NotImplementedError()
 
     def create_gemport(self, device, data):
-        log.info('create-gemport', data=data)
+        log.info('create-gemport - Not implemented - We do not use this',
+                 data=data)
         raise NotImplementedError()
 
     def update_gemport(self, device, data):
-        log.info('update-gemport', data=data)
+        log.info('update-gemport - Not implemented - We do not use this',
+                 data=data)
         raise NotImplementedError()
 
     def remove_gemport(self, device, data):
-        log.info('remove-gemport', data=data)
+        log.info('remove-gemport - Not implemented - We do not use this',
+                 data=data)
         raise NotImplementedError()
 
     def create_multicast_gemport(self, device, data):
-        log.info('create-mcast-gemport', data=data)
+        log.info('create-mcast-gemport  - Not implemented - We do not use '
+                 'this', data=data)
         raise NotImplementedError()
 
     def update_multicast_gemport(self, device, data):
-        log.info('update-mcast-gemport', data=data)
+        log.info('update-mcast-gemport - Not implemented - We do not use '
+                 'this', data=data)
         raise NotImplementedError()
 
     def remove_multicast_gemport(self, device, data):
-        log.info('remove-mcast-gemport', data=data)
+        log.info('remove-mcast-gemport - Not implemented - We do not use '
+                 'this', data=data)
         raise NotImplementedError()
 
     def create_multicast_distribution_set(self, device, data):
-        log.info('create-mcast-distribution-set', data=data)
+        log.info('create-mcast-distribution-set - Not implemented - We do '
+                 'not use this', data=data)
         raise NotImplementedError()
 
     def update_multicast_distribution_set(self, device, data):
-        log.info('update-mcast-distribution-set', data=data)
+        log.info('update-mcast-distribution-set - Not implemented - We do '
+                 'not use this', data=data)
         raise NotImplementedError()
 
     def remove_multicast_distribution_set(self, device, data):
-        log.info('remove-mcast-distribution-set', data=data)
+        log.info('remove-mcast-distribution-set - Not implemented - We do '
+                 'not use this', data=data)
         raise NotImplementedError()
 
     def disable_child_device(self, parent_device_id, child_device):
-        log.info('disable-child_device', parent_device_id=parent_device_id, child_device=child_device)
+        log.info('disable-child_device', parent_device_id=parent_device_id,
+                 child_device=child_device)
         handler = self.devices[parent_device_id]
         handler.disable_child_device(child_device)
 
     def delete_child_device(self, parent_device_id, child_device):
-        log.info('delete-child_device', parent_device_id=parent_device_id, child_device=child_device)
+        log.info('delete-child_device', parent_device_id=parent_device_id,
+                 child_device=child_device)
         handler = self.devices[parent_device_id]
         handler.delete_child_device(child_device)
diff --git a/voltha/adapters/openolt/openolt_bw.py b/voltha/adapters/openolt/openolt_bw.py
index 77e52d1..7c70b78 100644
--- a/voltha/adapters/openolt/openolt_bw.py
+++ b/voltha/adapters/openolt/openolt_bw.py
@@ -30,7 +30,7 @@
             bw = self.proxy.get(
                 '/traffic_descriptor_profiles/{}'.format(serial_number))
         except KeyError:
-            self.log.info('bandwidth not configured',
+            self.log.debug('bandwidth not configured',
                           serial_number=serial_number)
             try:
                 bw = self.proxy.get('/traffic_descriptor_profiles/{}' \
diff --git a/voltha/adapters/openolt/openolt_device.py b/voltha/adapters/openolt/openolt_device.py
index ec587f7..61e434c 100644
--- a/voltha/adapters/openolt/openolt_device.py
+++ b/voltha/adapters/openolt/openolt_device.py
@@ -164,9 +164,11 @@
             reactor.callFromThread(self.go_state_up, reconciliation=True)
         '''
 
-        self.log.debug('openolt-device-created', device_id=self.device_id)
+        self.log.info('openolt-device-created', device_id=self.device_id)
 
     def do_state_connected(self, event):
+        self.log.debug("do_state_connected")
+
         device = self.adapter_agent.get_device(self.device_id)
         device.connect_status = ConnectStatus.REACHABLE
         self.adapter_agent.update_device(device)
@@ -180,6 +182,8 @@
         self.bw_mgr = OpenOltBW(self.log, self.proxy)
 
     def do_state_up(self, event):
+        self.log.debug("do_state_up")
+
         device = self.adapter_agent.get_device(self.device_id)
 
         # Update phys OF device
@@ -238,7 +242,7 @@
         self.log.debug('starting-indications-thread')
         self.log.debug('connecting to olt', device_id=self.device_id)
         self.channel_ready_future.result()  # blocking call
-        self.log.debug('connected to olt', device_id=self.device_id)
+        self.log.info('connected to olt', device_id=self.device_id)
         self.go_state_connected()
 
         self.indications = self.stub.EnableIndication(openolt_pb2.Empty())
@@ -438,7 +442,8 @@
 
         if onu_device.proxy_address.onu_id != onu_indication.onu_id:
             # FIXME - handle onu id mismatch
-            self.log.warn('ONU-id-mismatch',
+            self.log.warn('ONU-id-mismatch, can happen if both voltha and '
+                          'the olt rebooted',
                           expected_onu_id=onu_device.proxy_address.onu_id,
                           received_onu_id=onu_indication.onu_id)
 
@@ -591,7 +596,7 @@
                 onu_adapter_agent.create_gemport(onu_device, gem_port)
 
             else:
-                self.log.warn('unsupported-openolt-onu-adapter')
+                self.log.error('unsupported-openolt-onu-adapter')
 
         else:
             self.log.warn('Not-implemented-or-invalid-value-of-oper-state',
@@ -685,7 +690,7 @@
 
             send_pkt = binascii.unhexlify(str(payload).encode("HEX"))
 
-            self.log.info(
+            self.log.debug(
                 'sending-packet-to-ONU', egress_port=egress_port,
                 intf_id=platform.intf_id_from_uni_port_num(egress_port),
                 onu_id=platform.onu_id_from_port_num(egress_port),
@@ -699,7 +704,7 @@
             self.stub.OnuPacketOut(onu_pkt)
 
         elif egress_port_type == Port.ETHERNET_NNI:
-            self.log.info('sending-packet-to-uplink', egress_port=egress_port,
+            self.log.debug('sending-packet-to-uplink', egress_port=egress_port,
                           packet=str(pkt).encode("HEX"))
 
             send_pkt = binascii.unhexlify(str(pkt).encode("HEX"))
@@ -729,7 +734,7 @@
                                             channel_id=intf_id, onu_id=onu_id,
                                             onu_session_id=onu_id)
 
-        self.log.info("Adding ONU", proxy_address=proxy_address)
+        self.log.debug("Adding ONU", proxy_address=proxy_address)
 
         serial_number_str = self.stringify_serial_number(serial_number)
 
@@ -793,7 +798,7 @@
 
         label = self.port_name(port_no, port_type, intf_id)
 
-        self.log.info('adding-port', port_no=port_no, label=label,
+        self.log.debug('adding-port', port_no=port_no, label=label,
                       port_type=port_type)
 
         port = Port(port_no=port_no, label=label, type=port_type,
@@ -835,7 +840,6 @@
 
         device = self.adapter_agent.get_device(self.device_id)
         self.log.debug('update flow table', number_of_flows=len(flows))
-        in_port = None
 
         for flow in flows:
             is_down_stream = None
@@ -847,12 +851,12 @@
 
             for port in ports:
                 if (port.port_no == in_port):
-                    self.log.info('downstream-flow')
+                    self.log.debug('downstream-flow', in_port=in_port)
                     is_down_stream = True
                     break
             if is_down_stream is None:
                 is_down_stream = False
-                self.log.info('upstream-flow')
+                self.log.debug('upstream-flow', in_port=in_port)
 
             for flow in flows:
                 try:
@@ -897,39 +901,23 @@
 
 
     def delete(self):
-        self.log.info('delete-olt', device_id=self.device_id)
+        self.log.info('delete-olt - Not implemented yet',
+                      device_id=self.device_id)
 
-        # Stop the grpc communication threads
-        self.log.info('stopping-grpc-threads', device_id=self.device_id)
-
-        # Close the grpc channel
-        # self.log.info('unsubscribing-grpc-channel', device_id=self.device_id)
-        # self.channel.unsubscribe()
-
-        self.log.info('successfully-deleted-olt', device_id=self.device_id)
 
     def reenable(self):
         self.log.debug('reenabling-olt', device_id=self.device_id)
 
         try:
             self.stub.ReenableOlt(openolt_pb2.Empty())
-            # The resulting indication will bring up  the OLT
-            # self.go_state_up()
 
-            # We can't enable all child devices, what if they had been
-            # individually disabled before ? For the same reason we can't
-            # disable them all on disable of the olt
-
-            # self.log.info('enabling-child-devices', olt_device_id=self.device_id)
-            # self.adapter_agent.update_child_devices_state(
-            #     parent_device_id=self.device_id,
-            #     admin_state=AdminState.ENABLED)
-            #  Set all ports to enabled
             self.log.info('enabling-all-ports', device_id=self.device_id)
             self.adapter_agent.enable_all_ports(self.device_id)
-            self.log.info('openolt device reenabled')
         except Exception as e:
             self.log.error('Failure to reenable openolt device', error=e)
+        else:
+            self.log.info('openolt device reenabled')
+
 
 
     def disable_child_device(self, child_device):
diff --git a/voltha/adapters/openolt/openolt_flow_mgr.py b/voltha/adapters/openolt/openolt_flow_mgr.py
index d6cc7b6..48c877d 100644
--- a/voltha/adapters/openolt/openolt_flow_mgr.py
+++ b/voltha/adapters/openolt/openolt_flow_mgr.py
@@ -380,7 +380,7 @@
         elif 'trap_to_host' in action_info:
             action.cmd.trap_to_host = True
         else:
-            self.log.info('Invalid-action-field')
+            self.log.info('Invalid-action-field', action_info=action_info)
             return
         return action
 
diff --git a/voltha/adapters/openolt/openolt_statistics.py b/voltha/adapters/openolt/openolt_statistics.py
index dee695f..f001028 100644
--- a/voltha/adapters/openolt/openolt_statistics.py
+++ b/voltha/adapters/openolt/openolt_statistics.py
@@ -60,9 +60,10 @@
         # TODO: send to kafka ?
         # FIXME: etcd problem, do not update objects for now
         # # UNTESTED : the openolt driver does not yet provide flow stats
-        # self.device.adapter_agent.update_flow_stats(self.device.logical_device_id,
-        #     flow_id=flow_stats.flow_id, packet_count=flow_stats.tx_packets,
-        #     byte_count=flow_stats.tx_bytes)
+        # self.device.adapter_agent.update_flow_stats(
+        #       self.device.logical_device_id,
+        #       flow_id=flow_stats.flow_id, packet_count=flow_stats.tx_packets,
+        #       byte_count=flow_stats.tx_bytes)
 
     def ports_statistics_kpis(self, port_stats):
         pm_data = {}
diff --git a/voltha/core/adapter_agent.py b/voltha/core/adapter_agent.py
index 19f03f6..2ca627f 100644
--- a/voltha/core/adapter_agent.py
+++ b/voltha/core/adapter_agent.py
@@ -508,7 +508,7 @@
         :return: None
         """
         assert isinstance(port, Port)
-        self.log.info('delete-port-reference', device_id=device_id, port=port)
+        self.log.debug('delete-port-reference', device_id=device_id, port=port)
         self._del_peer_reference(device_id, port)
 
         # update child port details
@@ -523,7 +523,7 @@
         :return: None
         """
         assert isinstance(port, Port)
-        self.log.info('add-port-reference', device_id=device_id, port=port)
+        self.log.debug('add-port-reference', device_id=device_id, port=port)
         self._add_peer_reference(device_id, port)
         # update child port details
         self._make_up_to_date('/devices/{}/ports'.format(device_id),
diff --git a/voltha/core/device_agent.py b/voltha/core/device_agent.py
index 0174ae6..d0247bd 100644
--- a/voltha/core/device_agent.py
+++ b/voltha/core/device_agent.py
@@ -80,7 +80,7 @@
 
     @inlineCallbacks
     def start(self, device=None, reconcile=False):
-        self.log.info('starting', device=device)
+        self.log.debug('starting', device=device)
         self._set_adapter_agent()
         if device:
             # Starting from an existing data, so set the last_data
diff --git a/voltha/core/global_handler.py b/voltha/core/global_handler.py
index ee7901a..b0bcef9 100644
--- a/voltha/core/global_handler.py
+++ b/voltha/core/global_handler.py
@@ -120,19 +120,19 @@
 
     @twisted_async
     def GetVoltha(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         return self.root.get('/', depth=1)
 
     @twisted_async
     def ListVolthaInstances(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         items = self.dispatcher.get_cluster_instances()
         return VolthaInstances(items=items)
 
     @twisted_async
     @inlineCallbacks
     def GetVolthaInstance(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         core_id = self.dispatcher.get_core_id_from_instance_id(request.id)
         if not core_id:
             log.info('invalid-instance-id', instance=request.id)
@@ -157,7 +157,7 @@
     @twisted_async
     @inlineCallbacks
     def ListLogicalDevices(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListLogicalDevices',
                                                   Empty(),
                                                   context,
@@ -168,7 +168,7 @@
     @twisted_async
     @inlineCallbacks
     def GetLogicalDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         response = yield self.dispatcher.dispatch('GetLogicalDevice',
                                                   request,
@@ -188,7 +188,7 @@
     @twisted_async
     @inlineCallbacks
     def ListLogicalDevicePorts(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         response = yield self.dispatcher.dispatch('ListLogicalDevicePorts',
                                                   request,
@@ -208,7 +208,7 @@
     @twisted_async
     @inlineCallbacks
     def GetLogicalDevicePort(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         response = yield self.dispatcher.dispatch('GetLogicalDevicePort',
                                                   request,
@@ -228,7 +228,7 @@
     @twisted_async
     @inlineCallbacks
     def ListLogicalDeviceFlows(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListLogicalDeviceFlows',
                                                   request,
                                                   context,
@@ -247,7 +247,7 @@
     @twisted_async
     @inlineCallbacks
     def EnableLogicalDevicePort(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('EnableLogicalDevicePort',
                                                   request,
                                                   context,
@@ -266,7 +266,7 @@
     @twisted_async
     @inlineCallbacks
     def DisableLogicalDevicePort(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('DisableLogicalDevicePort',
                                                   request,
                                                   context,
@@ -285,7 +285,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateLogicalDeviceFlowTable(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'UpdateLogicalDeviceFlowTable',
             request,
@@ -305,7 +305,7 @@
     @twisted_async
     @inlineCallbacks
     def ListLogicalDeviceFlowGroups(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'ListLogicalDeviceFlowGroups',
             request,
@@ -325,7 +325,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateLogicalDeviceFlowGroupTable(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'UpdateLogicalDeviceFlowGroupTable',
             request,
@@ -345,7 +345,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDevices(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListDevices',
                                                   Empty(),
                                                   context,
@@ -356,7 +356,7 @@
     @twisted_async
     @inlineCallbacks
     def ListAdapters(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListAdapters',
                                                   Empty(),
                                                   context,
@@ -367,7 +367,7 @@
     @twisted_async
     @inlineCallbacks
     def GetDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('GetDevice',
                                                   request,
                                                   context,
@@ -385,7 +385,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('CreateDevice',
                                                   request,
                                                   context)
@@ -402,7 +402,7 @@
     @twisted_async
     @inlineCallbacks
     def EnableDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('EnableDevice',
                                                   request,
                                                   context,
@@ -420,7 +420,7 @@
     @twisted_async
     @inlineCallbacks
     def DisableDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('DisableDevice',
                                                   request,
                                                   context,
@@ -438,7 +438,7 @@
     @twisted_async
     @inlineCallbacks
     def RebootDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('RebootDevice',
                                                   request,
                                                   context,
@@ -456,7 +456,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('DeleteDevice',
                                                   request,
                                                   context,
@@ -474,7 +474,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDevicePorts(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListDevicePorts',
                                                   request,
                                                   context,
@@ -492,7 +492,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDevicePmConfigs(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListDevicePmConfigs',
                                                   request,
                                                   context,
@@ -510,7 +510,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateDevicePmConfigs(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('UpdateDevicePmConfigs',
                                                   request,
                                                   context,
@@ -528,7 +528,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDeviceFlows(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListDeviceFlows',
                                                   request,
                                                   context,
@@ -546,7 +546,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDeviceFlowGroups(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListDeviceFlowGroups',
                                                   request,
                                                   context,
@@ -564,7 +564,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDeviceTypes(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         # we always deflect this to the local instance, as we assume
         # they all loaded the same adapters, supporting the same device
         # types
@@ -584,7 +584,7 @@
     @twisted_async
     @inlineCallbacks
     def GetDeviceType(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         # we always deflect this to the local instance, as we assume
         # they all loaded the same adapters, supporting the same device
         # types
@@ -605,7 +605,7 @@
     @twisted_async
     @inlineCallbacks
     def ListDeviceGroups(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListDeviceGroups',
                                                   Empty(),
                                                   context,
@@ -616,12 +616,12 @@
     @twisted_async
     @inlineCallbacks
     def GetDeviceGroup(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('GetDeviceGroup',
                                                   request,
                                                   context,
                                                   id=request.id)
-        log.info('grpc-response', response=response)
+        log.debug('grpc-response', response=response)
         if isinstance(response, DispatchError):
             log.warn('grpc-error-response', error=response.error_code)
             context.set_details('Device group\'{}\' error'.format(request.id))
@@ -635,7 +635,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAllChannelgroupConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllChannelgroupConfig',
             Empty(),
@@ -659,7 +659,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateChannelgroup(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelgroupConfig)
             request.id = create_empty_broadcast_id()
@@ -685,7 +685,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteChannelgroup(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelgroupConfig)
             request.id = create_empty_broadcast_id()
@@ -711,7 +711,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAllChannelpartitionConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllChannelpartitionConfig',
             Empty(),
@@ -729,7 +729,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateChannelpartition(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelpartitionConfig)
             request.id = create_empty_broadcast_id()
@@ -756,7 +756,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateChannelpartition(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelpartitionConfig)
             request.id = create_empty_broadcast_id()
@@ -783,7 +783,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteChannelpartition(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelpartitionConfig)
             request.id = create_empty_broadcast_id()
@@ -810,7 +810,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAllChannelpairConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllChannelpairConfig',
             Empty(),
@@ -828,7 +828,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateChannelpair(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelpairConfig)
             request.id = create_empty_broadcast_id()
@@ -854,7 +854,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateChannelpair(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelpairConfig)
             request.id = create_empty_broadcast_id()
@@ -880,7 +880,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteChannelpair(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.ChannelpairConfig)
             request.id = create_empty_broadcast_id()
@@ -906,13 +906,13 @@
     @twisted_async
     @inlineCallbacks
     def GetAllChannelterminationConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllChannelterminationConfig',
             request,
             context,
             id=request.id)
-        log.info('grpc-response', response=response)
+        log.debug('grpc-response', response=response)
         if isinstance(response, DispatchError):
             log.warn('grpc-error-response', error=response.error_code)
             context.set_details('Channeltermination \'{}\' error'.format(
@@ -926,13 +926,13 @@
     @twisted_async
     @inlineCallbacks
     def CreateChanneltermination(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'CreateChanneltermination',
             request,
             context,
             id=request.id)
-        log.info('grpc-response', response=response)
+        log.debug('grpc-response', response=response)
         if isinstance(response, DispatchError):
             log.warn('grpc-error-response', error=response.error_code)
             context.set_details('Channeltermination \'{}\' error'.format(
@@ -946,13 +946,13 @@
     @twisted_async
     @inlineCallbacks
     def UpdateChanneltermination(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'UpdateChanneltermination',
             request,
             context,
             id=request.id)
-        log.info('grpc-response', response=response)
+        log.debug('grpc-response', response=response)
         if isinstance(response, DispatchError):
             log.warn('grpc-error-response', error=response.error_code)
             context.set_details('Channeltermination \'{}\' error'.format(
@@ -966,13 +966,13 @@
     @twisted_async
     @inlineCallbacks
     def DeleteChanneltermination(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response =  yield self.dispatcher.dispatch(
             'DeleteChanneltermination',
             request,
             context,
             id=request.id)
-        log.info('grpc-response', response=response)
+        log.debug('grpc-response', response=response)
         if isinstance(response, DispatchError):
             log.warn('grpc-error-response', error=response.error_code)
             context.set_details('Channeltermination \'{}\' error'.format(
@@ -986,7 +986,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAllOntaniConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllOntaniConfig',
             Empty(),
@@ -1004,7 +1004,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateOntani(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.OntaniConfig)
             request.id = create_empty_broadcast_id()
@@ -1030,7 +1030,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateOntani(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.OntaniConfig)
             request.id = create_empty_broadcast_id()
@@ -1056,7 +1056,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteOntani(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.OntaniConfig)
             request.id = create_empty_broadcast_id()
@@ -1082,7 +1082,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAllVOntaniConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllVOntaniConfig',
             Empty(),
@@ -1100,7 +1100,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateVOntani(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.VOntaniConfig)
             request.id = create_empty_broadcast_id()
@@ -1126,7 +1126,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateVOntani(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.VOntaniConfig)
             request.id = create_empty_broadcast_id()
@@ -1152,7 +1152,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteVOntani(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.VOntaniConfig)
             request.id = create_empty_broadcast_id()
@@ -1178,7 +1178,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAllVEnetConfig(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             'GetAllVEnetConfig',
             request,
@@ -1196,7 +1196,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateVEnet(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.VEnetConfig)
             request.id = create_empty_broadcast_id()
@@ -1222,7 +1222,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateVEnet(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.VEnetConfig)
             request.id = create_empty_broadcast_id()
@@ -1248,7 +1248,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteVEnet(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         try:
             assert isinstance(request, fb.VEnetConfig)
             request.id = create_empty_broadcast_id()
@@ -1400,7 +1400,7 @@
         return self.manage_global_xpon_object (request, context, _method_name)
 
     def get_all_global_xpon_object_data(self, request, context, method_name):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch(
             method_name,
             Empty(),
@@ -1416,7 +1416,7 @@
             returnValue(response)
 
     def manage_global_xpon_object(self, request, context, method_name):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         _xpon_object_type = self.xpon_object_type[method_name]
         try:
             assert isinstance(request, _xpon_object_type)
@@ -1445,7 +1445,7 @@
     @twisted_async
     @inlineCallbacks
     def CreateAlarmFilter(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         # Since AlarmFilter applies to the entire cluster, it will be assigned
         # a global id (using a global core_id).  Every Voltha instance will
         # have the same data.  Since the voltha instances are managed by
@@ -1480,7 +1480,7 @@
     @twisted_async
     @inlineCallbacks
     def GetAlarmFilter(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('GetAlarmFilter',
                                                   request,
                                                   context,
@@ -1498,7 +1498,7 @@
     @twisted_async
     @inlineCallbacks
     def UpdateAlarmFilter(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('UpdateAlarmFilter',
                                                   request,
                                                   context,
@@ -1517,7 +1517,7 @@
     @twisted_async
     @inlineCallbacks
     def DeleteAlarmFilter(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('DeleteAlarmFilter',
                                                   request,
                                                   context,
@@ -1536,7 +1536,7 @@
     @twisted_async
     @inlineCallbacks
     def ListAlarmFilters(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('ListAlarmFilters',
                                                   Empty(),
                                                   context,
@@ -1554,7 +1554,7 @@
     @twisted_async
     @inlineCallbacks
     def GetImages(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('GetImages',
                                                   request,
                                                   context,
@@ -1572,7 +1572,7 @@
     @twisted_async
     @inlineCallbacks
     def SelfTest(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('SelfTest',
                                                   request,
                                                   context,
@@ -1591,7 +1591,7 @@
     @inlineCallbacks
     def DownloadImage(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('DownloadImage',
                                                       request,
                                                       context,
@@ -1613,7 +1613,7 @@
     @inlineCallbacks
     def GetImageDownloadStatus(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('GetImageDownloadStatus',
                                                       request,
                                                       context,
@@ -1635,7 +1635,7 @@
     @inlineCallbacks
     def GetImageDownload(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('GetImageDownload',
                                                       request,
                                                       context,
@@ -1657,7 +1657,7 @@
     @inlineCallbacks
     def ListImageDownloads(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('ListImageDownloads',
                                                       request,
                                                       context,
@@ -1680,7 +1680,7 @@
     @inlineCallbacks
     def CancelImageDownload(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('CancelImageDownload',
                                                       request,
                                                       context,
@@ -1702,7 +1702,7 @@
     @inlineCallbacks
     def ActivateImageUpdate(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('ActivateImageUpdate',
                                                       request,
                                                       context,
@@ -1724,7 +1724,7 @@
     @inlineCallbacks
     def RevertImageUpdate(self, request, context):
         try:
-            log.info('grpc-request', request=request)
+            log.debug('grpc-request', request=request)
             response = yield self.dispatcher.dispatch('RevertImageUpdate',
                                                       request,
                                                       context,
@@ -1745,7 +1745,7 @@
     @twisted_async
     @inlineCallbacks
     def GetMibDeviceData(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         response = yield self.dispatcher.dispatch('GetMibDeviceData',
                                                   request,
                                                   context,
diff --git a/voltha/core/local_handler.py b/voltha/core/local_handler.py
index 7f5d2ad..75a5c7a 100644
--- a/voltha/core/local_handler.py
+++ b/voltha/core/local_handler.py
@@ -115,32 +115,32 @@
 
     @twisted_async
     def GetVolthaInstance(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         depth = int(dict(context.invocation_metadata()).get('get-depth', 0))
         res = self.root.get('/', depth=depth)
         return res
 
     @twisted_async
     def GetHealth(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         return self.root.get('/health')
 
     @twisted_async
     def ListAdapters(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         items = self.root.get('/adapters')
         sorted_items = sorted(items, key=lambda i: i.id)
         return Adapters(items=sorted_items)
 
     @twisted_async
     def ListLogicalDevices(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         items = self.root.get('/logical_devices')
         return LogicalDevices(items=items)
 
     @twisted_async
     def GetLogicalDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         depth = int(dict(context.invocation_metadata()).get('get-depth', 0))
 
@@ -160,7 +160,7 @@
 
     @twisted_async
     def ListLogicalDevicePorts(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -180,7 +180,7 @@
 
     @twisted_async
     def GetLogicalDevicePort(self, request, context):
-        log.info('grpc-request', requst=request)
+        log.debug('grpc-request', requst=request)
 
         if '/' in request.id:
             context.set_details(
@@ -199,7 +199,7 @@
 
     @twisted_async
     def ListLogicalDeviceFlows(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -219,7 +219,7 @@
 
     @twisted_async
     def EnableLogicalDevicePort(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -239,7 +239,7 @@
 
     @twisted_async
     def DisableLogicalDevicePort(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -259,7 +259,7 @@
 
     @twisted_async
     def UpdateLogicalDeviceFlowTable(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -279,7 +279,7 @@
 
     @twisted_async
     def ListLogicalDeviceFlowGroups(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -299,7 +299,7 @@
 
     @twisted_async
     def UpdateLogicalDeviceFlowGroupTable(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -319,13 +319,13 @@
 
     @twisted_async
     def ListDevices(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         items = self.root.get('/devices')
         return Devices(items=items)
 
     @twisted_async
     def GetDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         depth = int(dict(context.invocation_metadata()).get('get-depth', 0))
 
@@ -345,7 +345,7 @@
 
     @twisted_async
     def CreateDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         known_device_types = dict(
             (dt.id, dt) for dt in self.root.get('/device_types'))
@@ -401,7 +401,7 @@
 
     @twisted_async
     def EnableDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -432,7 +432,7 @@
 
     @twisted_async
     def DisableDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -464,7 +464,7 @@
 
     @twisted_async
     def RebootDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -490,7 +490,7 @@
 
     @twisted_async
     def DownloadImage(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -531,7 +531,7 @@
 
     @twisted_async
     def GetImageDownloadStatus(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -567,7 +567,7 @@
 
     @twisted_async
     def GetImageDownload(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -590,7 +590,7 @@
 
     @twisted_async
     def ListImageDownloads(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -613,7 +613,7 @@
 
     @twisted_async
     def CancelImageDownload(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -640,7 +640,7 @@
 
     @twisted_async
     def ActivateImageUpdate(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -667,7 +667,7 @@
 
     @twisted_async
     def RevertImageUpdate(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -694,7 +694,7 @@
 
     @twisted_async
     def DeleteDevice(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -727,7 +727,7 @@
 
     @twisted_async
     def ListDevicePorts(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -746,7 +746,7 @@
 
     @twisted_async
     def ListDevicePmConfigs(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -789,7 +789,7 @@
 
     @twisted_async
     def ListDeviceFlows(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -808,7 +808,7 @@
 
     @twisted_async
     def ListDeviceFlowGroups(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -828,14 +828,14 @@
 
     @twisted_async
     def ListDeviceTypes(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         items = self.root.get('/device_types')
         sorted_items = sorted(items, key=lambda i: i.id)
         return DeviceTypes(items=sorted_items)
 
     @twisted_async
     def GetDeviceType(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         depth = int(dict(context.invocation_metadata()).get('get-depth', 0))
 
@@ -855,14 +855,14 @@
 
     @twisted_async
     def ListDeviceGroups(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
         # TODO is this mapped to tree or taken from coordinator?
         items = self.root.get('/device_groups')
         return DeviceGroups(items=items)
 
     @twisted_async
     def GetDeviceGroup(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         depth = int(dict(context.invocation_metadata()).get('get-depth', 0))
 
@@ -1185,7 +1185,7 @@
 
     @twisted_async
     def CreateAlarmFilter(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         try:
             assert isinstance(request, AlarmFilter)
@@ -1224,7 +1224,7 @@
 
     @twisted_async
     def GetImages(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -1244,7 +1244,7 @@
 
     @twisted_async
     def SelfTest(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         if '/' in request.id:
             context.set_details(
@@ -1296,7 +1296,7 @@
 
     @twisted_async
     def Subscribe(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         # Check if an ofagent subscriber is assigned
         if self.subscriber is None:
@@ -1336,7 +1336,7 @@
 
     @twisted_async
     def GetMibDeviceData(self, request, context):
-        log.info('grpc-request', request=request)
+        log.debug('grpc-request', request=request)
 
         depth = int(dict(context.invocation_metadata()).get('get-depth', -1))
 
diff --git a/voltha/northbound/grpc/grpc_server.py b/voltha/northbound/grpc/grpc_server.py
index ded5de4..1c746d8 100644
--- a/voltha/northbound/grpc/grpc_server.py
+++ b/voltha/northbound/grpc/grpc_server.py
@@ -227,7 +227,7 @@
             service.stop()
         self.server.stop(grace)
         self.thread_pool.shutdown(False)
-        log.debug('stopped')
+        log.info('stopped')
 
     def register(self, activator_func, service):
         """
