打这个猴子补丁,就可以不需要修改任何一处代码,就能使项目中所有py文件的所有控制台日志变彩色和可点击跳转。
# -*- coding: utf-8 -*- # @Author : ydf # @Time : 2019/8/1 0001 17:54 """ 如果老项目没用使用Logmanager,可以打此猴子补丁,自动变彩色和可跳转。 """ import sys import os import logging class ColorHandler(logging.Handler): """ A handler class which writes logging records, appropriately formatted, to a stream. Note that this class does not close the stream, as sys.stdout or sys.stderr may be used. """ os_name = os.name terminator = ' ' bule = 96 if os_name == 'nt' else 36 yellow = 93 if os_name == 'nt' else 33 def __init__(self, stream=None,): """ Initialize the handler. If stream is not specified, sys.stderr is used. """ logging.Handler.__init__(self) self.formatter = logging.Formatter( '%(asctime)s - %(name)s - "%(pathname)s:%(lineno)d" - %(funcName)s - %(levelname)s - %(message)s', "%Y-%m-%d %H:%M:%S") if stream is None: stream = sys.stdout # stderr无彩。 self.stream = stream self._display_method = 7 if self.os_name == 'posix' else 0 def setFormatter(self, fmt): pass # 禁止私自设置日志模板。固定使用可跳转的模板。 def flush(self): """ Flushes the stream. """ self.acquire() try: if self.stream and hasattr(self.stream, "flush"): self.stream.flush() finally: self.release() def emit0(self, record): """ Emit a record. If a formatter is specified, it is used to format the record. The record is then written to the stream with a trailing newline. If exception information is present, it is formatted using traceback.print_exception and appended to the stream. If the stream has an 'encoding' attribute, it is used to determine how to do the output to the stream. """ # noinspection PyBroadException try: msg = self.format(record) stream = self.stream if record.levelno == 10: # msg_color = (' 33[0;32m%s 33[0m' % msg) # 绿色 msg_color = ('