Python日志记录忽略文件处理程序的转义(\ 033)

时间:2020-11-10 08:46:58

标签: python logging

我正在使用日志记录一些信息。
我在记录器中同时使用了FileHandlerStreamHandler,以便在控制台中输出消息并保存到特定文件中。
在控制台中,为了突出显示一些重要消息,我使用了\033。但是这个词也添加到我的日志文件中,并显示一个奇怪的符号。以下是我目前的用法示例

logger = logging.getLogger('SayHello')
file_hdlr = logging.FileHandler('test.log')
file_hdlr.setFormatter(logging.Formatter('%(message)s'))
console_hdlr = logging.StreamHandler()
console_hdlr.setFormatter(logging.Formatter('%(message)s'))
logger.addHandler(file_hdlr)
logger.addHandler(console_hdlr)
logger.setLevel(logging.INFO)
logger.info('\033[1;31mHello World\033[0m')

控制台输出: Hello World(红色)

日志文件中的输出: [1; 31mHello World [0m

如何忽略文件处理程序中的\033和其他颜色代码?我应该重写FileHandler类吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

经过几个小时的跟踪,我发现FileHandler也继承自StreamHandlerFileHandler.emit调用StreamHandler.emit将消息写入文件。
要忽略消息中的控制顺序,我必须分别覆盖FileHandlerStreamHandler所说的CustomFileHandlerCustomStreamHandler
CustomFileHandler.emit调用CustomStreamHandler.emit编写消息,我们必须在其中删除控制序列。在正则表达式的帮助下,应该很容易找到它们。