PyCharm logging output colours
我正在使用PyCharm在Mac OS X中开发GAE应用程序。是否可以在PyCharm的运行控制台中显示颜色?
我设置了一个处理程序以ansi格式输出颜色。 然后,我添加了处理程序:
1 2 3 4 5 6 7 8 9 10 11 | LOG = logging.getLogger() LOG.setLevel(logging.DEBUG) for handler in LOG.handlers: LOG.removeHandler(handler) LOG.addHandler(ColorHandler()) LOG.info('hello!') LOG.warning('hello!') LOG.debug('hello!') LOG.error('hello!') |
但是颜色是一样的。
编辑:
JetBrains问题跟踪器的响应:将代码段的第55行从sys.stderr更改为sys.stdout。 stderr流始终为红色,而stdout则不。
现在可以正确显示颜色。
PyCharm本身不支持该功能,但是您可以下载Grep Console插件并根据需要设置颜色。
这是屏幕截图:
http://plugins.jetbrains.com/files/7125/screenshot_14104.png strike>(链接无效)
我希望它能有所帮助:)尽管它不提供完全彩色的控制台,但这是朝着它迈出的一步。
从PyCharm 2017.2起,您可以通过启用以下功能来执行此操作:
运行编辑配置... |配置|在输出控制台中模拟终端
晚到晚了,但是有这个问题的其他人,这是对我有用的解决方案:
1 2 3 | import logging import sys logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) |
来自这个答案
为我解决的问题(在PyCharm 2017.2上)是转到
2019年9月:PyCharm社区2019.1
PyCharm将所有日志(包括信息/调试)涂成红色。
结果是:这不是PyCharm问题,这是配置默认
PyCharm将写入
使用不带参数的
为了找回无色日志,请在基本配置中指定
1 2 3 4 5 6 7 | logging.basicConfig( level=logging.DEBUG, format='[%(levelname)8s]: %(message)s', handlers=[ logging.FileHandler(f'{os.path.basename(__file__)}.log'), logging.StreamHandler(sys.stdout), ]) |
或者更详细:
1 | logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout)) |
这修复了我的红色PyCharm日志。
PyCharm 2019.1.1(Windows 10,1709)-按原样运行的摘录-正常运行。

1 2 | self.stream.write(record.msg +" ", color) |
至
1 2 | self.stream.write(self.format(record) +" ", color) |
可以将70-71行移至手动文件运行结构下以节省测试能力:
1 2 3 4 5 6 7 8 | if __name__ =="__main__": logging.getLogger().setLevel(logging.DEBUG) logging.getLogger().addHandler(ColorHandler()) logging.debug("Some debugging output") logging.info("Some info output") logging.error("Some error output") logging.warning("Some warning output") |
与标准StreamHandler进行比较:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import logging import logging_colored log_format = logging.Formatter("[%(threadName)-15.15s] [%(levelname)-5.5s] %(message)s") logger = logging.getLogger('Main') logger.setLevel(logging.DEBUG) console = logging.StreamHandler() console.setFormatter(log_format) logger.addHandler(console) console = logging_colored.ColorHandler() console.setFormatter(log_format) logger.addHandler(console) ... |

我发现以下解决方案。显然Pycharm重定向sys.stdout。从sys模块文档中:
1 2 3 | sys.__stdin__ sys.__stdout__ sys.__stderr__ |
These objects contain the original values of stdin, stderr and stdout
at the start of the program. They are used during finalization, and
could be useful to print to the actual standard stream no matter if
the sys.std* object has been redirected.It can also be used to restore the actual files to known working file
objects in case they have been overwritten with a broken object.
However, the preferred way to do this is to explicitly save the
previous stream before replacing it, and restore the saved object.
因此,要解决此问题,您可以将输出重定向到
1 2 3 4 5 | console: class: logging.StreamHandler level: DEBUG stream:"ext://sys.__stdout__" formatter: colorFormatter |