如何解决如何从日志消息中使`FileHandler`剥离终端转义序列颜色?
我只有一个Logger
和两个Handler
:StreamHandler
和FileHandler
。
我想通过StreamHandler
使用转义序列(请参见 Logger使用情况)将彩色输出记录到终端。但是,我不想通过FileHandler
记录这样的转义序列:
Log to StreamHandler: \033[39m{}\033[0m\033[91m{}\033[0m\033[39m{}\033[0m
Log to FileHandler: {}{}{}
按顺序,FileHandler
应该去除终端转义序列。
除了创建分别配置为Logger
和StreamHandler
的两个FileHandler
之外,还有什么解决方法吗?
如果可以避免的话,我真的不想在代码中包含两个单独的Logger
。
记录器使用情况:
fmt = 'Match: {} ({}/v{}): \033[39m{}\033[0m\033[91m{}\033[0m\033[39m{}\033[0m ({}) {}'
self.logger.info(
fmt,o.type.lower(),o.id,o.version,remove_control_chars(match.left),remove_control_chars(match.text),remove_control_chars(match.right),match.regex,suffix
)
记录器配置:
def init(log,level,no_console):
formatter = logging.Formatter(
'{asctime:s} -- {levelname:<5s} -- {name:s} -- {process:d} -- {funcName:s} -- {message:s}',datefmt='%m/%d/%Y %I:%M:%S %p',style='{'
)
logger = logging.getLogger('watchdog')
if getattr(logging,level.upper()) is None:
raise common.exc.WatchdogException(f'Failed to set level for logger: {level.upper()}')
logger.setLevel(getattr(logging,level.upper()))
if not no_console:
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
try:
handler = logging.FileHandler(log,mode='w+')
handler.setFormatter(formatter)
logger.addHandler(handler)
except Exception as exc:
raise common.exc.WatchdogException(f'Failed to initialize file handler: {log}') from exc
解决方法
It is possible to strip the extra characters in the FileHandler
by adding a Filter
to it,但是有一个更好的解决方案。每个处理程序可以有自己的Formatter
。因此,理想的方法是仅将Formatter
添加到StreamHandler
中,从而将终端转义序列添加到日志中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。