Module mirai.colorlog

此模块提供带颜色的格式化日志输出的功能。

这是一个辅助模块,与机器人功能无关。如果你喜欢这一功能,也可以把它复制到你的项目中.

Expand source code
# -*- coding: utf-8 -*-
"""
此模块提供带颜色的格式化日志输出的功能。

这是一个辅助模块,与机器人功能无关。如果你喜欢这一功能,也可以把它复制到你的项目中.
"""
import logging
from enum import IntEnum

__all__ = ['ConsoleColor', 'ColoredFormatter']


class ConsoleColor(IntEnum):
    """各种颜色。"""
    BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, \
        BLACK_BOLD, RED_BOLD, GREEN_BOLD, YELLOW_BOLD, \
        BLUE_BOLD, MAGENTA_BOLD, CYAN_BOLD, WHITE_BOLD = range(16)

    def seq(self):
        s = '\033[1;' if self.value >= 8 else '\033['
        s += f'{30 + self.value % 8}m'
        return s


COLORS = {
    'DEBUG': ConsoleColor.GREEN,
    'INFO': ConsoleColor.WHITE,
    'WARNING': ConsoleColor.YELLOW,
    'ERROR': ConsoleColor.RED,
    'CRITICAL': ConsoleColor.RED_BOLD,
}


class ColoredFormatter(logging.Formatter):
    """带颜色的日志格式化器。"""
    def __init__(self, *args, colors=None, **kwargs):
        """
        Args:
            colors: 一个字典,键是日志级别名称,值是颜色。
        """
        super().__init__(*args, **kwargs)
        if colors is None:
            colors = COLORS
        self.colors = colors

    def format(self, record):
        formatted = super().format(record)
        levelname = record.levelname
        if levelname in self.colors:
            formatted = self.colors[levelname].seq() + formatted + "\033[0m"
        return formatted

Classes

class ColoredFormatter (*args, colors=None, **kwargs)

带颜色的日志格式化器。

Args

colors
一个字典,键是日志级别名称,值是颜色。
Expand source code
class ColoredFormatter(logging.Formatter):
    """带颜色的日志格式化器。"""
    def __init__(self, *args, colors=None, **kwargs):
        """
        Args:
            colors: 一个字典,键是日志级别名称,值是颜色。
        """
        super().__init__(*args, **kwargs)
        if colors is None:
            colors = COLORS
        self.colors = colors

    def format(self, record):
        formatted = super().format(record)
        levelname = record.levelname
        if levelname in self.colors:
            formatted = self.colors[levelname].seq() + formatted + "\033[0m"
        return formatted

Ancestors

  • logging.Formatter

Methods

def format(self, record)

Format the specified record as text.

The record's attribute dictionary is used as the operand to a string formatting operation which yields the returned string. Before formatting the dictionary, a couple of preparatory steps are carried out. The message attribute of the record is computed using LogRecord.getMessage(). If the formatting string uses the time (as determined by a call to usesTime(), formatTime() is called to format the event time. If there is exception information, it is formatted using formatException() and appended to the message.

Expand source code
def format(self, record):
    formatted = super().format(record)
    levelname = record.levelname
    if levelname in self.colors:
        formatted = self.colors[levelname].seq() + formatted + "\033[0m"
    return formatted
class ConsoleColor (value, names=None, *, module=None, qualname=None, type=None, start=1)

各种颜色。

Expand source code
class ConsoleColor(IntEnum):
    """各种颜色。"""
    BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, \
        BLACK_BOLD, RED_BOLD, GREEN_BOLD, YELLOW_BOLD, \
        BLUE_BOLD, MAGENTA_BOLD, CYAN_BOLD, WHITE_BOLD = range(16)

    def seq(self):
        s = '\033[1;' if self.value >= 8 else '\033['
        s += f'{30 + self.value % 8}m'
        return s

Ancestors

  • enum.IntEnum
  • builtins.int
  • enum.Enum

Class variables

var BLACK
var BLACK_BOLD
var BLUE
var BLUE_BOLD
var CYAN
var CYAN_BOLD
var GREEN
var GREEN_BOLD
var MAGENTA
var MAGENTA_BOLD
var RED
var RED_BOLD
var WHITE
var WHITE_BOLD
var YELLOW
var YELLOW_BOLD

Methods

def seq(self)
Expand source code
def seq(self):
    s = '\033[1;' if self.value >= 8 else '\033['
    s += f'{30 + self.value % 8}m'
    return s