TL;DR: 如何让流处理程序打印带有颜色的日志,而文件处理程序记录它们而不使用文本代码字符? 只要我还在使用standart python库,任何方法都可以。你知道吗
---
我一直在寻找如何添加颜色的记录器时,它的流。 我还想使用standart python日志库。
我找到了这个解决方案:https://stackoverflow.com/a/7995762/11037602
这对我很有帮助,问题是我的记录器登录到流和文件中。文件也会得到转义符/颜色字符,如下所示:
- [1;33mWARNING[1;0m - run - log
而不是:
- WARNING - run - log
我的代码:
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条评论”,user@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语句并不能解决我的问题。字符仍记录在文件中。你知道吗
总而言之,如何让流处理程序打印带有颜色的日志,而让文件处理程序记录没有文字代码字符的日志?只要我还在使用standart python库,任何方法都可以。你知道吗
使用这个模块怎么样? https://coloredlogs.readthedocs.io/en/latest/
相关问题 更多 >
编程相关推荐