From 09199c10df97b87b9d61c0316cc14b658de3fab6 Mon Sep 17 00:00:00 2001 From: David Buchmann Date: Tue, 17 Dec 2013 18:29:46 +0100 Subject: [PATCH 1/2] Add context aware logmessages to the socketio client --- socketIO_client/__init__.py | 38 +++++++++++++++++++++-------------- socketIO_client/transports.py | 19 +++++++++++------- 2 files changed, 35 insertions(+), 22 deletions(-) diff --git a/socketIO_client/__init__.py b/socketIO_client/__init__.py index 3bdecf1..877b1b3 100644 --- a/socketIO_client/__init__.py +++ b/socketIO_client/__init__.py @@ -28,6 +28,9 @@ class BaseNamespace(object): self._callback_by_event = {} self.initialize() + def _log(self, level, msg, *attrs): + _log.log(level, '%s: %s' % (self._transport._url, msg), *attrs) + def initialize(self): 'Initialize custom variables here; you can override this method' pass @@ -48,19 +51,19 @@ class BaseNamespace(object): def on_connect(self): 'Called after server connects; you can override this method' - _log.debug('%s [connect]', self.path) + self._log(logging.DEBUG, '%s [connect]', self.path) def on_disconnect(self): 'Called after server disconnects; you can override this method' - _log.debug('%s [disconnect]', self.path) + self._log(logging.DEBUG, '%s [disconnect]', self.path) def on_heartbeat(self): 'Called after server sends a heartbeat; you can override this method' - _log.debug('%s [heartbeat]', self.path) + self._log(logging.DEBUG, '%s [heartbeat]', self.path) def on_message(self, data): 'Called after server sends a message; you can override this method' - _log.info('%s [message] %s', self.path, data) + self._log(logging.INFO, '%s [message] %s', self.path, data) def on_event(self, event, *args): """ @@ -73,27 +76,28 @@ class BaseNamespace(object): if callback: arguments.append('callback(*args)') callback(*args) - _log.info('%s [event] %s(%s)', self.path, event, ', '.join(arguments)) + self._log(logging.INFO, '%s [event] %s(%s)', self.path, event, + ', '.join(arguments)) def on_error(self, reason, advice): 'Called after server sends an error; you can override this method' - _log.info('%s [error] %s', self.path, advice) + self._log(logging.INFO, '%s [error] %s', self.path, advice) def on_noop(self): 'Called after server sends a noop; you can override this method' - _log.info('%s [noop]', self.path) + self._log(logging.INFO, '%s [noop]', self.path) def on_open(self, *args): - _log.info('%s [open] %s', self.path, args) + self._log(logging.INFO, '%s [open] %s', self.path, args) def on_close(self, *args): - _log.info('%s [close] %s', self.path, args) + self._log(logging.INFO, '%s [close] %s', self.path, args) def on_retry(self, *args): - _log.info('%s [retry] %s', self.path, args) + self._log(logging.INFO, '%s [retry] %s', self.path, args) def on_reconnect(self, *args): - _log.info('%s [reconnect] %s', self.path, args) + self._log(logging.INFO, '%s [reconnect] %s', self.path, args) def _find_event_callback(self, event): # Check callbacks defined by on() @@ -135,6 +139,10 @@ class SocketIO(object): self.kw = kw self.define(Namespace) + def log(self, level, msg, *attrs): + _log.log(level, '%s: %s' % (self.base_url, msg), + *attrs) + def __enter__(self): return self @@ -183,7 +191,7 @@ class SocketIO(object): warning = Exception('[connection error] %s' % e) warning_screen.throw(warning) except StopIteration: - _log.warn(warning) + self.log(logging.WARNING, warning) self.disconnect() except KeyboardInterrupt: pass @@ -193,7 +201,7 @@ class SocketIO(object): try: self._process_packet(packet) except PacketError as e: - _log.warn('[packet error] %s', e) + self.log(logging.WARNING, '[packet error] %s', e) def _process_packet(self, packet): code, packet_id, path, data = packet @@ -243,13 +251,13 @@ class SocketIO(object): warning = Exception('[waiting for connection] %s' % e) warning_screen.throw(warning) except StopIteration: - _log.warn(warning) + self.log(logging.WARNING, warning) return self.__transport def _get_transport(self): socketIO_session = _get_socketIO_session( self.is_secure, self.base_url, **self.kw) - _log.debug('[transports available] %s', ' '.join( + self.log(logging.DEBUG, '[transports available] %s', ' '.join( socketIO_session.server_supported_transports)) # Initialize heartbeat_pacemaker self.heartbeat_pacemaker = self._make_heartbeat_pacemaker( diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index ed4e59c..372a11c 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -25,6 +25,9 @@ class _AbstractTransport(object): self._wants_to_disconnect = False self._packets = [] + def _log(self, level, msg, *attrs): + _log.log(level, '[%s] %s' % (self._url, msg), *attrs) + def disconnect(self, path=''): if not path: self._wants_to_disconnect = True @@ -69,7 +72,7 @@ class _AbstractTransport(object): packet_parts = str(code), packet_id, path, data packet_text = ':'.join(packet_parts) self.send(packet_text) - _log.debug('[packet sent] %s', packet_text) + self._log(logging.DEBUG, '[packet sent] %s', packet_text) def recv_packet(self): try: @@ -78,11 +81,11 @@ class _AbstractTransport(object): except IndexError: pass for packet_text in self.recv(): - _log.debug('[packet received] %s', packet_text) + self._log(logging.DEBUG, '[packet received] %s', packet_text) try: packet_parts = packet_text.split(':', 3) except AttributeError: - _log.warn('[packet error] %s', packet_text) + self._log(logging.WARNING, '[packet error] %s', packet_text) continue code, packet_id, path, data = None, None, None, None packet_count = len(packet_parts) @@ -121,6 +124,7 @@ class _WebsocketTransport(_AbstractTransport): url = '%s://%s/websocket/%s' % ( 'wss' if is_secure else 'ws', base_url, socketIO_session.id) + self._url = url try: self._connection = websocket.create_connection(url) except socket.timeout as e: @@ -138,11 +142,11 @@ class _WebsocketTransport(_AbstractTransport): self._connection.send(packet_text) except websocket.WebSocketTimeoutException as e: message = 'timed out while sending %s (%s)' % (packet_text, e) - _log.warn(message) + self._log(logging.WARNING, message) raise TimeoutError(e) except socket.error as e: message = 'disconnected while sending %s (%s)' % (packet_text, e) - _log.warn(message) + self._log(logging.WARNING, message) raise ConnectionError(message) def recv(self): @@ -257,7 +261,7 @@ class _JSONP_PollingTransport(_AbstractTransport): self._id, response_text = self.RESPONSE_PATTERN.match( response_text).groups() except AttributeError: - _log.warn('[packet error] %s', response_text) + self._log(self.WARNING, '[packet error] %s', response_text) return if not response_text.startswith(BOUNDARY): yield response_text.decode('unicode_escape') @@ -280,7 +284,8 @@ def _negotiate_transport( server_supported_transports = session.server_supported_transports for supported_transport in client_supported_transports: if supported_transport in server_supported_transports: - _log.debug('[transport selected] %s', supported_transport) + _log.debug('[%s] [transport selected] %s', base_url, + supported_transport) return { 'websocket': _WebsocketTransport, 'xhr-polling': _XHR_PollingTransport, From 20b15872ee00bf3656f34f565f7f1ac756a3ce61 Mon Sep 17 00:00:00 2001 From: David Buchmann Date: Thu, 26 Jun 2014 14:42:25 +0200 Subject: [PATCH 2/2] Fixed logging.WARNING typo --- socketIO_client/transports.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/socketIO_client/transports.py b/socketIO_client/transports.py index 372a11c..46a6736 100644 --- a/socketIO_client/transports.py +++ b/socketIO_client/transports.py @@ -261,7 +261,7 @@ class _JSONP_PollingTransport(_AbstractTransport): self._id, response_text = self.RESPONSE_PATTERN.match( response_text).groups() except AttributeError: - self._log(self.WARNING, '[packet error] %s', response_text) + self._log(logging.WARNING, '[packet error] %s', response_text) return if not response_text.startswith(BOUNDARY): yield response_text.decode('unicode_escape')