def _log(self, level, msg, kwargs={}): """ Logs the message at the given level If the msg is larger than MAX_SIZE the logging is skipped :param level: info, warning, error, ... :param msg: :param kwargs: :return: None """ logger = getattr(Logger._logger[self._name], level) assert logger, f"Error: invalid logging level specified ({level})" extra = {**self._default_args, **kwargs} size = gettotalsizeof(msg) + gettotalsizeof(extra) if size > Logger.MAX_SIZE: msg = f"{msg[:-1000]}..." extra = self._default_args logger(msg, extra=extra) self._save_log(level, msg)
def offload_message(msg, converter): """Offload message content :param msg: :param converter: :return: """ if _CONTENTS in msg: contents = msg[_CONTENTS] size = gettotalsizeof(contents) if size > _MAX_CONTENTS_SIZE: unique_name = _get_unique_name() filename = _get_filename(unique_name) try: with open(filename, 'w') as file: file.write(converter(contents)) except IOError as e: # When the write fails, returns the msg untouched print(f"Offload failed ({str(e)})", filename) return msg # Replace the contents by a reference msg[_CONTENTS_REF] = unique_name del msg[_CONTENTS] return msg