Skip to content

控制台日志按日志级别区分颜色 #80

@casuallyone

Description

@casuallyone

稍微修改下代码可以恢复正常显示

# server/logging.py
class ColorHandler(logging.StreamHandler):
    WHITE = "0"
    RED = "31"
    GREEN = "32"
    YELLOW = "33"
    BLUE = "34"
    PURPLE = "35"

    def emit(self, record):
        try:
            msg = self.format(record)
            level_color_map = {
                logging.DEBUG: self.BLUE,
                logging.INFO: self.GREEN,
                logging.WARNING: self.YELLOW,
                logging.ERROR: self.RED,
                logging.CRITICAL: self.PURPLE
            }

            csi = f"{chr(27)}["  # 控制序列引入符
            color = level_color_map.get(record.levelno, self.WHITE)

            self.stream.write(f"{csi}{color}m{msg}{csi}m\n")
            self.flush()
        except RecursionError:
            raise
        except Exception:
            self.handleError(record)

对应修改console的输出为server.logging.ColorHandler

# server/settings/logging.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            '()': 'server.logging.ServerFormatter',
            'format': '%(asctime)s.%(msecs)03d [%(levelname)s] [%(requestUser)s] [%(requestUuid)s][%(pathname)s:%(lineno)d] %(process)d %(thread)d %(message)s'
        },
        'main': {
            '()': 'server.logging.ServerFormatter',
            'datefmt': '%Y-%m-%d %H:%M:%S',
            'format': '%(asctime)s.%(msecs)03d [%(levelname)s] [%(requestUser)s] [%(requestUuid)s] [%(name)s.%(funcName)s:%(lineno)d] %(message)s',
        },
        'exception': {
            '()': 'server.logging.ServerFormatter',
            'datefmt': '%Y-%m-%d %H:%M:%S',
            'format': '\n%(asctime)s.%(msecs)03d [%(levelname)s %(requestUser)s] [%(requestUuid)s] %(message)s',
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'server.logging.ColorHandler',
            'formatter': 'main'
        },
        'server': {
            'encoding': 'utf8',
            'level': 'DEBUG',
            'class': 'server.logging.DailyTimedRotatingFileHandler',
            'when': 'midnight',
            'formatter': 'main',
            'filename': SERVER_LOG_FILE,
        },
        'drf_exception': {
            'encoding': 'utf8',
            'level': 'DEBUG',
            'class': 'server.logging.DailyTimedRotatingFileHandler',
            'when': 'midnight',
            'formatter': 'exception',
            'filename': DRF_EXCEPTION_LOG_FILE,
        },
        'unexpected_exception': {
            'encoding': 'utf8',
            'level': 'DEBUG',
            'class': 'server.logging.DailyTimedRotatingFileHandler',
            'when': 'midnight',
            'formatter': 'exception',
            'filename': UNEXPECTED_EXCEPTION_LOG_FILE,
        }
    },
    'loggers': {
        # '': {  # 默认的logger ,所有日志将会输出到配置的 handlers
        #     'handlers': ['server', 'console'],
        #     'level': LOG_LEVEL,
        #     'propagate': False,
        # },
        'django': {
            'handlers': ['null'],
            'propagate': False,
            'level': LOG_LEVEL,
        },
        'django.request': {
            'handlers': ['console', 'server'],
            'level': LOG_LEVEL,
            'propagate': False,
        },
        'django.server': {
            'handlers': ['console', 'server'],
            'level': LOG_LEVEL,
            'propagate': False,
        },
        'django.security': {
            'handlers': ['console', 'server'],
            'level': LOG_LEVEL,
            'propagate': False,
        },
        'xadmin': {
            'handlers': ['console', 'server'],
            'level': LOG_LEVEL,
        },
        'drf_exception': {
            'handlers': ['console', 'drf_exception'],
            'level': LOG_LEVEL,
        },
        'unexpected_exception': {
            'handlers': ['console', 'unexpected_exception'],
            'level': LOG_LEVEL,
        },
    },
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions