我正在使用日志记录一些信息。
我在记录器中同时使用了FileHandler
和StreamHandler
,以便在控制台中输出消息并保存到特定文件中。
在控制台中,为了突出显示一些重要消息,我使用了\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
类吗?非常感谢!
答案 0 :(得分:0)
经过几个小时的跟踪,我发现FileHandler
也继承自StreamHandler
。 FileHandler.emit
调用StreamHandler.emit
将消息写入文件。
要忽略消息中的控制顺序,我必须分别覆盖FileHandler
和StreamHandler
所说的CustomFileHandler
和CustomStreamHandler
。
CustomFileHandler.emit
调用CustomStreamHandler.emit
编写消息,我们必须在其中删除控制序列。在正则表达式的帮助下,应该很容易找到它们。