Esempio n. 1
0
    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)
Esempio n. 2
0
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