From dc96690a7128e7bf788e2cb5c225b4f4d95b8178 Mon Sep 17 00:00:00 2001 From: "peng.xu" Date: Wed, 27 Nov 2019 12:54:55 +0800 Subject: [PATCH] [skip ci](shards): format log, fixes #568 --- shards/utils/colors.py | 72 +++++++++++++++++++++++++++++++++++ shards/utils/logger_helper.py | 51 +++++++++++++++++++------ 2 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 shards/utils/colors.py diff --git a/shards/utils/colors.py b/shards/utils/colors.py new file mode 100644 index 0000000000..7f55ae1a2f --- /dev/null +++ b/shards/utils/colors.py @@ -0,0 +1,72 @@ +# Reset +Color_Off='\033[0m' # Text Reset + +# Regular Colors +Black='\033[0;30m' # Black +Red='\033[0;31m' # Red +Green='\033[0;32m' # Green +Yellow='\033[0;33m' # Yellow +Blue='\033[0;34m' # Blue +Purple='\033[0;35m' # Purple +Cyan='\033[0;36m' # Cyan +White='\033[0;37m' # White + +# Bold +BBlack='\033[1;30m' # Black +BRed='\033[1;31m' # Red +BGreen='\033[1;32m' # Green +BYellow='\033[1;33m' # Yellow +BBlue='\033[1;34m' # Blue +BPurple='\033[1;35m' # Purple +BCyan='\033[1;36m' # Cyan +BWhite='\033[1;37m' # White + +# Underline +UBlack='\033[4;30m' # Black +URed='\033[4;31m' # Red +UGreen='\033[4;32m' # Green +UYellow='\033[4;33m' # Yellow +UBlue='\033[4;34m' # Blue +UPurple='\033[4;35m' # Purple +UCyan='\033[4;36m' # Cyan +UWhite='\033[4;37m' # White + +# Background +On_Black='\033[40m' # Black +On_Red='\033[41m' # Red +On_Green='\033[42m' # Green +On_Yellow='\033[43m' # Yellow +On_Blue='\033[44m' # Blue +On_Purple='\033[45m' # Purple +On_Cyan='\033[46m' # Cyan +On_White='\033[47m' # White + +# High Intensity +IBlack='\033[0;90m' # Black +IRed='\033[0;91m' # Red +IGreen='\033[0;92m' # Green +IYellow='\033[0;93m' # Yellow +IBlue='\033[0;94m' # Blue +IPurple='\033[0;95m' # Purple +ICyan='\033[0;96m' # Cyan +IWhite='\033[0;97m' # White + +# Bold High Intensity +BIBlack='\033[1;90m' # Black +BIRed='\033[1;91m' # Red +BIGreen='\033[1;92m' # Green +BIYellow='\033[1;93m' # Yellow +BIBlue='\033[1;94m' # Blue +BIPurple='\033[1;95m' # Purple +BICyan='\033[1;96m' # Cyan +BIWhite='\033[1;97m' # White + +# High Intensity backgrounds +On_IBlack='\033[0;100m' # Black +On_IRed='\033[0;101m' # Red +On_IGreen='\033[0;102m' # Green +On_IYellow='\033[0;103m' # Yellow +On_IBlue='\033[0;104m' # Blue +On_IPurple='\033[0;105m' # Purple +On_ICyan='\033[0;106m' # Cyan +On_IWhite='\033[0;107m' # White diff --git a/shards/utils/logger_helper.py b/shards/utils/logger_helper.py index b4e3b9c5b6..5141f5dc73 100644 --- a/shards/utils/logger_helper.py +++ b/shards/utils/logger_helper.py @@ -3,6 +3,7 @@ import datetime from pytz import timezone from logging import Filter import logging.config +from utils import colors class InfoFilter(logging.Filter): @@ -31,29 +32,53 @@ class CriticalFilter(logging.Filter): COLORS = { - 'HEADER': '\033[95m', - 'INFO': '\033[92m', - 'DEBUG': '\033[94m', - 'WARNING': '\033[93m', - 'ERROR': '\033[95m', - 'CRITICAL': '\033[91m', - 'ENDC': '\033[0m', + 'HEADER': colors.BWhite, + 'INFO': colors.On_IWhite + colors.BBlack, + 'INFOM': colors.White, + 'DEBUG': colors.On_IBlue + colors.BWhite, + 'DEBUGM': colors.BIBlue, + 'WARNING': colors.On_IYellow + colors.BWhite, + 'WARNINGM': colors.BIYellow, + 'ERROR': colors.On_IRed + colors.BWhite, + 'ERRORM': colors.BIRed, + 'CRITICAL': colors.On_Red + colors.BWhite, + 'CRITICALM': colors.BRed, + 'ASCTIME': colors.On_Cyan + colors.BIYellow, + 'MESSAGE': colors.IGreen, + 'FILENAME': colors.BCyan, + 'LINENO': colors.BCyan, + 'THREAD': colors.BCyan, + 'ENDC': colors.Color_Off, } class ColorFulFormatColMixin: def format_col(self, message_str, level_name): if level_name in COLORS.keys(): - message_str = COLORS.get(level_name) + message_str + COLORS.get( - 'ENDC') + message_str = COLORS[level_name] + message_str + COLORS['ENDC'] return message_str + def formatTime(self, record, datefmt=None): + ret = super().formatTime(record, datefmt) + ret = COLORS['ASCTIME'] + ret + COLORS['ENDC'] + return ret -class ColorfulFormatter(logging.Formatter, ColorFulFormatColMixin): + def format_record(self, record): + msg_schema = record.levelname + 'M' + record.msg = '{}{}{}'.format(COLORS[msg_schema], record.msg, COLORS['ENDC']) + record.filename = COLORS['FILENAME'] + record.filename + COLORS['ENDC'] + record.lineno = '{}{}{}'.format(COLORS['LINENO'], record.lineno, COLORS['ENDC']) + record.threadName = '{}{}{}'.format(COLORS['THREAD'], record.threadName, COLORS['ENDC']) + record.levelname = COLORS[record.levelname] + record.levelname + COLORS['ENDC'] + return record + + +class ColorfulFormatter(ColorFulFormatColMixin, logging.Formatter): def format(self, record): + record = self.format_record(record) message_str = super(ColorfulFormatter, self).format(record) - return self.format_col(message_str, level_name=record.levelname) + return message_str def config(log_level, log_path, name, tz='UTC'): @@ -76,7 +101,9 @@ def config(log_level, log_path, name, tz='UTC'): 'format': '%(asctime)s | %(levelname)s | %(name)s | %(threadName)s: %(message)s (%(filename)s:%(lineno)s)', }, 'colorful_console': { - 'format': '%(asctime)s | %(levelname)s | %(name)s | %(threadName)s: %(message)s (%(filename)s:%(lineno)s)', + 'format': '%(asctime)s | %(levelname)s: %(message)s (%(filename)s:%(lineno)s) (%(threadName)s)', + # 'format': '%(asctime)s | %(levelname)s | %(threadName)s: %(message)s (%(filename)s:%(lineno)s)', + # 'format': '%(asctime)s | %(levelname)s | %(name)s | %(threadName)s: %(message)s (%(filename)s:%(lineno)s)', '()': ColorfulFormatter, }, },