Esempio n. 1
0
def redo_logger_formatting():
    from AppInfo import log_class_length
    # noinspection PyProtectedMember
    from kivy.logger import formatter_message, COLOR_SEQ, COLORS, RESET_SEQ, ColoredFormatter as _ColoredFormatter, \
        WHITE
    import logging
    from kivy import logger as kvLogger

    ENABLE_DEEP_DEBUG = bool(os.environ.get(
        "ENABLE_DEEP_DEBUG"))  # Requires normal debug to be enabled
    if not ENABLE_DEEP_DEBUG:
        try:
            # noinspection PyUnresolvedReferences
            #  we have the attribute error for a reason, this is set outside during run time
            if logging.ENABLE_DEEP_DEBUG:
                ENABLE_DEEP_DEBUG = True

        except AttributeError:
            pass

    ENABLE_CONFIG_LOGGING = bool(os.environ.get(
        "ENABLE_CONFIG_LOGGING"))  # Requires normal debug to be enabled
    if not ENABLE_CONFIG_LOGGING:
        try:
            # noinspection PyUnresolvedReferences
            #  we have the attribute error for a reason, this is set outside during run time
            if logging.ENABLE_CONFIG_LOGGING:
                ENABLE_CONFIG_LOGGING = True

        except AttributeError:
            pass

    class ColoredFormatter(_ColoredFormatter):
        def format(self, record: logging.LogRecord) -> str:
            # noinspection PyBroadException
            try:
                msg: (str, str) = record.msg.split(':', 1)
                if len(msg) == 2:
                    record.msg = ('[%-' + str(log_class_length) +
                                  's]%s') % (msg[0], msg[1])
            except Exception:
                print("redo_logger_formatting broke!")
            levelname: str = record.levelname
            if record.levelno == kvLogger.LOG_LEVELS["trace"]:
                levelname: str = 'TRACE'
                record.levelname = levelname
            if self.use_color and levelname in COLORS:
                if "|||DEEP DEBUG|||" in record.msg:
                    levelname_color: str = (str(COLOR_SEQ % (30 + WHITE)) +
                                            "[DEEP DEBUG")
                    record.levelname = levelname_color
                    record.msg = record.msg.replace("|||DEEP DEBUG|||", "")

                elif "|||CONFIG|||" in record.msg:
                    levelname_color: str = (str(COLOR_SEQ % (30 + BLACK)) +
                                            "[CONFIG")
                    record.levelname = levelname_color
                    record.msg = record.msg.replace("|||CONFIG|||", "")

                else:
                    levelname_color: str = (str(COLOR_SEQ %
                                                (30 + COLORS[levelname])) +
                                            "[" + levelname)
                    record.levelname = levelname_color
            return logging.Formatter.format(self, record)

    class DeepDebugFilter(logging.Filter):
        def filter(self, record):
            if not ENABLE_DEEP_DEBUG and "|||DEEP DEBUG|||" in record.msg:
                return False

            elif not ENABLE_CONFIG_LOGGING and "|||CONFIG|||" in record.msg:
                return False

            else:
                return True

    # noinspection SpellCheckingInspection
    use_color: bool = ((os.environ.get("WT_SESSION")
                        or os.environ.get("COLORTERM") == 'truecolor'
                        or os.environ.get('PYCHARM_HOSTED') == '1'
                        or os.environ.get('TERM') in (
                            'rxvt',
                            'rxvt-256color',
                            'rxvt-unicode',
                            'rxvt-unicode-256color',
                            'xterm',
                            'xterm-256color',
                        )) and os.environ.get('KIVY_BUILD')
                       not in ('android', 'ios'))
    if not use_color:
        color_fmt: str = formatter_message('[%(levelname)-7s] %(message)s',
                                           use_color)

    else:
        color_fmt: str = formatter_message(
            RESET_SEQ + '%(levelname)-18s] %(message)s', use_color)

    formatter: ColoredFormatter = ColoredFormatter(color_fmt,
                                                   use_color=use_color)

    _Logger.handlers[2].setFormatter(formatter)
    _Logger.addFilter(DeepDebugFilter())