【发布时间】:2020-12-15 08:31:02
【问题描述】:
我有一个 Logger 和两个 Handlers:StreamHandler 和 FileHandler。
我想通过StreamHandler 使用转义序列将彩色输出记录到终端(请参阅记录器用法)。但是,我不想通过FileHandler 记录这样的转义序列:
Log to StreamHandler: \033[39m{}\033[0m\033[91m{}\033[0m\033[39m{}\033[0m
Log to FileHandler: {}{}{}
换句话说,FileHandler 应该去掉终端转义序列。
除了创建两个分别配置StreamHandler 和FileHandler 的Loggers 之外,还有什么解决方案吗?
如果可以避免的话,我真的不想在代码中携带两个单独的Loggers。
记录器使用情况:
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
【问题讨论】:
标签: python python-3.x django logging terminal