ansistrm修改

sunninghao_branch
snh 2 months ago
parent e749525df1
commit c7e9d5a257

@ -61,10 +61,13 @@ class ColorizingStreamHandler(logging.StreamHandler):
message = stdoutEncode(self.format(record))
stream = self.stream
#如果当前流不是TTY直接写入消息
if not self.is_tty:
if message and message[0] == "\r":
message = message[1:]
stream.write(message)
#如果是TTY调用output_colorized方法来输出带颜色的消息
else:
self.output_colorized(message)
stream.write(getattr(self, 'terminator', '\n'))
@ -73,8 +76,10 @@ class ColorizingStreamHandler(logging.StreamHandler):
except (KeyboardInterrupt, SystemExit):
raise
except IOError:
#IO错误时什么也不做pass
pass
except:
#其他异常时调用handleError方法
self.handleError(record)
if not IS_WIN:
@ -102,22 +107,27 @@ class ColorizingStreamHandler(logging.StreamHandler):
h = None
fd = getattr(self.stream, 'fileno', None)
#文件描述符有效并且是标准输出或标准错误获取对应的Windows句柄
if fd is not None:
fd = fd()
if fd in (1, 2): # stdout or stderr
h = ctypes.windll.kernel32.GetStdHandle(-10 - fd)
#循环处理分割后的消息部分
while parts:
text = parts.pop(0)
#如果部分是文本,写入并刷新流
if text:
self.stream.write(text)
self.stream.flush()
#如果还有部分,取出下一个部分作为参数
if parts:
params = parts.pop(0)
#如果句柄有效,将参数分割并转换为整数,初始化颜色代码
if h is not None:
params = [int(p) for p in params.split(';')]
color = 0
@ -137,10 +147,12 @@ class ColorizingStreamHandler(logging.StreamHandler):
ctypes.windll.kernel32.SetConsoleTextAttribute(h, color)
def _reset(self, message):
# 如果消息不以重置序列结尾,则添加重置序列
#重置消息的颜色
if not message.endswith(self.reset):
# 如果消息不以重置序列结尾,则添加重置序列
reset = self.reset
elif self.bold in message: # 如果消息包含加粗,则在重置后加粗
elif self.bold in message:
# 如果消息包含加粗,则在重置后加粗
reset = self.reset + self.bold
else:
reset = self.reset
@ -148,20 +160,23 @@ class ColorizingStreamHandler(logging.StreamHandler):
return reset
def colorize(self, message, levelno):
# 根据日志级别给消息上色
# 根据日志级别给消息上色
if levelno in self.level_map and self.is_tty:
bg, fg, bold = self.level_map[levelno]
params = []
#如果背景色有效,添加背景色参数
if bg in self.color_map:
params.append(str(self.color_map[bg] + 40))
#如果前景色有效,添加前景色参数
if fg in self.color_map:
params.append(str(self.color_map[fg] + 30))
#如果需要加粗,添加加粗参数
if bold:
params.append('1')
#如果参数和消息都有效,检查消息是否有前缀(空格),并提取出来
if params and message:
if message.lstrip() != message:
prefix = re.search(r"\s+", message).group(0)

Loading…
Cancel
Save