diff --git a/dubbo/client.py b/dubbo/client.py
index 44bd8a1..74afee3 100644
--- a/dubbo/client.py
+++ b/dubbo/client.py
@@ -31,6 +31,8 @@
         if not zk_register and not host:
             raise RegisterException('zk_register和host至少需要填入一个')
 
+        logger.debug('Created client, interface={}, version={}'.format(interface, version))
+
         self.__interface = interface
         self.__version = version
         self.__dubbo_version = dubbo_version
@@ -73,8 +75,14 @@
             'method': method,
             'arguments': args
         }
-        # logger.debug(request_param)
+
+        logger.debug('Start request, host={}, params={}'.format(host, request_param))
+        start_time = time.time()
         result = connection_pool.get(host, request_param, timeout)
+        cost_time = int((time.time() - start_time) * 1000)
+        logger.debug('Finish request, host={}, params={}'.format(host, request_param))
+        logger.debug('Request invoked, host={}, params={}, result={}, cost={}ms, timeout={}s'.format(
+            host, request_param, result, cost_time, timeout))
         return result
 
 
@@ -159,13 +167,13 @@
         interface = path.split('/')[2]
 
         providers = self.zk.get_children(path, watch=self._watch_children)
-        logger.debug('{} providers: {}'.format(interface, providers))
         providers = filter(lambda provider: provider['scheme'] == 'dubbo', map(parse_url, providers))
         if not providers:
             logger.debug('no providers for interface {}'.format(interface))
             self.hosts[interface] = []
             return
         self.hosts[interface] = map(lambda provider: provider['host'], providers)
+        logger.debug('{} providers: {}'.format(interface, self.hosts[interface]))
 
     def _watch_configurators(self, event):
         """
@@ -184,8 +192,10 @@
             conf = {}
             for configurator in configurators:
                 conf[configurator['host']] = configurator['fields'].get('weight', 100)
+            logger.debug('{} configurators: {}'.format(interface, conf))
             self.weights[interface] = conf
         else:
+            logger.debug('No configurator for interface {}')
             self.weights[interface] = {}
 
     def _register_consumer(self, providers):
@@ -218,6 +228,7 @@
             params.append('{0}={1}'.format(key, value))
         consumer += '&'.join(params)
 
+        logger.debug('Create consumer {}'.format(fields))
         consumer_path = DUBBO_ZK_CONSUMERS.format(fields['interface'])
         self.zk.ensure_path(consumer_path)
         self.zk.create_async(consumer_path + '/' + quote(consumer, safe=''), ephemeral=True)
diff --git a/dubbo/common/util.py b/dubbo/common/util.py
index 3c7515d..60cbd23 100644
--- a/dubbo/common/util.py
+++ b/dubbo/common/util.py
@@ -6,6 +6,10 @@
 from sys import platform, maxsize
 from urlparse import urlparse, unquote, parse_qsl
 
+import logging
+
+logger = logging.getLogger('dubbo')
+
 ip = None
 heartbeat_id = 0
 invoke_id = 0
@@ -59,6 +63,7 @@
     try:
         sock.connect(('8.8.8.8', 80))
         ip = sock.getsockname()[0]
+        logger.debug('Current IP Address: {}'.format(ip))
     finally:
         sock.close()
     return ip
diff --git a/dubbo/connection/connections.py b/dubbo/connection/connections.py
index 75d8cae..e5a016c 100644
--- a/dubbo/connection/connections.py
+++ b/dubbo/connection/connections.py
@@ -53,8 +53,8 @@
         event = threading.Event()
         self.conn_events[invoke_id] = event
         # 发送数据
-        logger.debug('Request has been send for request id {}'.format(invoke_id))
         conn.write(request_data)
+        logger.debug('Waiting response, invoke_id={}, timeout={}, host={}'.format(invoke_id, timeout, host))
         event.wait(timeout)
         del self.conn_events[invoke_id]
 
@@ -125,20 +125,20 @@
             next_read_type   下一次读取需要读取的数据类型
             invoke_id        此次调用的id
         """
+        host = conn.remote_host()
         # 关闭连接
         if not data:
-            host = conn.remote_host()
             logger.debug('{} closed by remote server'.format(host))
             self._delete_connection(conn)
             return 0, 0, 0
 
-        logger.debug('Receive data type {} and invoke id {}'.format(data_type, invoke_id))
         # 响应的头部
         if data_type == 1:
-            logger.debug('Head has been received with invoke id {}'.format(unpack('!q', data[4:12])[0]))
+            logger.debug('received response head with invoke_id={}, host={}'.format(unpack('!q', data[4:12])[0], host))
             return self._parse_head(data, conn)
         # 错误的响应体
         elif data_type == 2:
+            logger.debug('received error response body with invoke_id={}, host={}'.format(invoke_id, host))
             res = Response(data)
             error = res.read_next()
             self.results[invoke_id] = DubboResponseException('\n{}'.format(error))
@@ -146,6 +146,7 @@
             return DEFAULT_READ_PARAMS
         # 正常的响应体
         elif data_type == 3:
+            logger.debug('received normal response body with invoke_id={}, host={}'.format(invoke_id, host))
             self._parse_response(invoke_id, data)
             return DEFAULT_READ_PARAMS
 
@@ -212,6 +213,7 @@
             self.results[invoke_id] = e
         finally:
             self.conn_events[invoke_id].set()  # 唤醒请求线程
+            logger.debug('Event set, invoked_id={}'.format(invoke_id))
 
     @staticmethod
     def _parse_error(res):
@@ -261,10 +263,10 @@
         # 未达到最大的超时次数，超时次数+1且发送心跳包
         else:
             self.client_heartbeats[host] += 1
-            invoke_id = list(bytearray(pack('!q', get_invoke_id())))
-            req = CLI_HEARTBEAT_REQ_HEAD + invoke_id + CLI_HEARTBEAT_TAIL
+            invoke_id = get_invoke_id()
+            req = CLI_HEARTBEAT_REQ_HEAD + list(bytearray(pack('!q', invoke_id))) + CLI_HEARTBEAT_TAIL
             conn.write(bytearray(req))
-            logger.debug('Head has been send for request id {}'.format(invoke_id))
+            logger.debug('Send ❤ request for invoke_id {}, host={}'.format(invoke_id, host))
 
 
 class SelectConnectionPool(BaseConnectionPool):
