TL; DR: 如何让流处理程序以彩色打印日志,文件处理程序如何在不使用文字代码字符的情况下记录日志? 只要我仍在使用标准的python库,任何方法对我来说都很好。
-
我一直在寻找如何在流式记录仪上添加颜色。 我也想使用标准的python日志记录库。
我找到了以下解决方案:https://stackoverflow.com/a/7995762/11037602
对我来说很好,问题是我的记录器登录到流和并进入文件。文件也将获得转义/颜色字符,如下所示:
- [1; 33mWARNING [1; 0m-运行-记录
代替:
- 警告-运行-日志
我的代码:
def setup_logger():
logger = logging.getLogger()
#Code suggested in SO question
logging.addLevelName( logging.WARNING, "\033[1;31m%s\033[1;0m" % logging.getLevelName(logging.WARNING))
logging.addLevelName( logging.ERROR, "\033[1;41m%s\033[1;0m" % logging.getLevelName(logging.ERROR))
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(funcName)s - %(message)s')
fh = logging.FileHandler('file.log')
fh.setFormatter(formatter)
logger.addHandler(fh)
sh = logging.StreamHandler()
sh.setFormatter(formatter)
logger.addHandler(sh)
return logger
正如我所说,这可行,但是它也会将字符记录到文件日志中。
如果您单击我链接的问题的“显示更多评论2”,则@lesnik用户建议将答案的代码放入if语句中,我假设他的意思是这样的:
if sys.stderr.isatty():
logging.addLevelName( logging.WARNING, "\033[1;31m%s\033[1;0m" % logging.getLevelName(logging.WARNING))
logging.addLevelName( logging.ERROR, "\033[1;41m%s\033[1;0m" % logging.getLevelName(logging.ERROR))
编辑:更正了拼写错误(由@Brad Solomon指出),但仅添加了if语句无法解决我的问题。字符仍在登录文件中。
总而言之,我如何让流处理程序使用彩色来打印日志,而文件处理程序如何在不使用文字代码字符的情况下记录日志?只要我仍在使用标准的python库,任何方法对我来说都很好。