我在Python中使用记录器,我希望它在控制台中显示一些带颜色的消息(不是全部)。
现在我这样做:
print('\033[0;41;97m')
logger.info('Colored message')
print('\033[0m')
效果很好,但问题是信息的上方和下方都有空白行。我不能这样做:
print('\033[0;41;97m', end='')
logger.info('Colored message')
print('\033[0m')
因为这样消息下面有一个空白行。我也不能这样做:
logger.info('\033[0;41;97m' + 'Colored message' + '\033[0m')
因为那时,当我打开日志文件时,我看到了奇怪的符号。有什么解决方案吗?
修改
ch = logging.StreamHandler()
fh = logging.handlers.RotatingFileHandler(log_file, 'a', max_bytes, 10)
ch_formatter = logging.Formatter('%(asctime)s - %(levelname)-4s - '
'%(message)s',
datefmt='%Y.%m.%d_%H:%M:%S_%Z')
fh_formatter = logging.Formatter('%(asctime)s - %(levelname)-4s - '
'%(message)s',
datefmt='%Y.%m.%d_%H:%M:%S_%Z')
ch.setFormatter(ch_formatter)
fh.setFormatter(fh_formatter)
logger.addHandler(ch)
logger.addHandler(fh)
答案 0 :(得分:3)
<强>更新强>
OP说我正在使用RotatingFileHandler 。 :)
定义一个转义FileHandler
ansi color
# file handler for **ansi_escape**
class MyFileHandler(logging.handlers.RotatingFileHandler):
import re
ansi_escape = re.compile(r'\x1b[^m]*m')
def emit(self, record):
record.msg = self.ansi_escape.sub('', record.msg)
logging.handlers.RotatingFileHandler.emit(self, record)
然后将此StreamHandler
添加到logger
ch = logging.StreamHandler()
fh = MyFileHandler('file.log')
ch_formatter = logging.Formatter('%(asctime)s - %(levelname)-4s - '
'%(message)s',
datefmt='%Y.%m.%d_%H:%M:%S_%Z')
fh_formatter = logging.Formatter('%(asctime)s - %(levelname)-4s - '
'%(message)s',
datefmt='%Y.%m.%d_%H:%M:%S_%Z')
ch.setFormatter(ch_formatter)
fh.setFormatter(fh_formatter)
logger.addHandler(ch)
logger.addHandler(fh)
定义infoc
...见下文:
logger.infoc = lambda msg: logger.info('\033[0;41;97m' + msg + '\033[0m')
最后你可以归档......
# for colored console but not file
logger.infoc('Colored message')
# for normal
logger.info('Normal message')
修改强>
如何将wrapper
用于彩色消息。
logger.infoc = lambda msg: logger.info('\033[0;41;97m' + msg + '\033[0m')
logger.infoc('Colored message')
使用basicConfig
作为
fmt = '\033[0;41;97m %(message)s \033[0m'
logging.basicConfig(level=logging.DEBUG, format=fmt)
logger = logging.getLogger(__file__)
logger.info('hello')
或者
console = logging.StreamHandler()
console.setFormatter(logging.Formatter(fmt))
logger.addHandler(console)
logger.error('hello')
<强>更新强>
颜色代码应仅在StreamHandler
。
像这样修改FileHandler
:
fileh = logging.FileHandler('file.log')
fileh.setFormatter(logging.Formatter('%(message)s')) # remove the color code.
logger.addHandler(fileh)
日志文件中没有更奇怪的符号。