gpt4 book ai didi

python - 如何在 Python 中装饰控制台记录器消息?

转载 作者:行者123 更新时间:2023-11-28 22:49:55 25 4
gpt4 key购买 nike

我在 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)

最佳答案

更新

OP 说我正在使用 RotatingFileHandler。 :)

定义一个转义ansi color的新FileHandler

# 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)

您的日志文件中不再有奇怪的符号。

关于python - 如何在 Python 中装饰控制台记录器消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23240383/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com