diff --git a/evennia/server/portal/amp.py b/evennia/server/portal/amp.py index 1e0817b4ab..6182f8d24c 100644 --- a/evennia/server/portal/amp.py +++ b/evennia/server/portal/amp.py @@ -83,6 +83,14 @@ def loads(data): return pickle.loads(to_str(data)) +def _get_logger(): + "Delay import of logger until absolutely necessary" + global _LOGGER + if not _LOGGER: + from evennia.utils import logger as _LOGGER + return _LOGGER + + @wraps def catch_traceback(func): "Helper decorator" @@ -90,10 +98,7 @@ def catch_traceback(func): try: func(*args, **kwargs) except Exception as err: - global _LOGGER - if not _LOGGER: - from evennia.utils import logger as _LOGGER - _LOGGER.log_trace() + _get_logger().log_trace() raise # make sure the error is visible on the other side of the connection too print(err) return decorator @@ -282,7 +287,7 @@ class AMPMultiConnectionProtocol(amp.AMP): try: super(AMPMultiConnectionProtocol, self).dataReceived(data) except KeyError: - _LOGGER.trace("Discarded incoming partial data: {}".format(to_str(data))) + _get_logger().log_trace("Discarded incoming partial data: {}".format(to_str(data))) elif self.multibatches: # invalid AMP, but we have a pending multi-batch that is not yet complete if data[-2:] == NULNUL: @@ -291,7 +296,7 @@ class AMPMultiConnectionProtocol(amp.AMP): try: super(AMPMultiConnectionProtocol, self).dataReceived(data) except KeyError: - _LOGGER.trace("Discarded incoming multi-batch data:".format(to_str(data))) + _get_logger().log_trace("Discarded incoming multi-batch data:".format(to_str(data))) else: # not an AMP communication, return warning self.transport.write(_HTTP_WARNING) @@ -345,12 +350,9 @@ class AMPMultiConnectionProtocol(amp.AMP): info (str): Error string. """ - global _LOGGER - if not _LOGGER: - from evennia.utils import logger as _LOGGER e.trap(Exception) - _LOGGER.log_err("AMP Error for %(info)s: %(e)s" % {'info': info, - 'e': e.getErrorMessage()}) + _get_logger().log_err("AMP Error for %(info)s: %(e)s" % {'info': info, + 'e': e.getErrorMessage()}) def data_in(self, packed_data): """