我正在使用PyCharm在Mac OS X中开发GAE应用程序。有没有办法在PyCharm的运行控制台中显示颜色?
我已设置handler以ansi格式输出颜色。然后,我添加了处理程序:
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 issue tracker的回复:将片段的第55行从sys.stderr更改为sys.stdout。 stderr流总是用红色着色而stdout不是。
现在正确显示颜色。
答案 0 :(得分:24)
PyCharm本身不支持该功能,但您可以下载Grep Console plugin并根据需要设置颜色。
这是一个截图:
http://plugins.jetbrains.com/files/7125/screenshot_14104.png (链接已死)
我希望它有所帮助:)尽管它没有提供完全彩色化的控制台,但它迈出了一步。
答案 1 :(得分:22)
答案 2 :(得分:6)
派对上晚了,但是有这个问题的其他人,这里的解决方案对我有用:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
这来自this answer
答案 3 :(得分:1)
9月。 2019 :PyCharm社区2019.1
PyCharm将所有日志(包括信息/调试)着色为红色。
结果是:这不是PyCharm问题,这是配置默认logging
的方式。
PyCharm将写入sys.stderr
的所有内容涂成红色。
当使用不带参数的StreamHandler()
时,默认流为sys.stderr
。
要获取非彩色日志,请在基本配置中指定logging.StreamHandler(stream=sys.stdout)
,如下所示:
logging.basicConfig(
level=logging.DEBUG,
format='[%(levelname)8s]: %(message)s',
handlers=[
logging.FileHandler(f'{os.path.basename(__file__)}.log'),
logging.StreamHandler(sys.stdout),
])
或更冗长:
logging.getLogger().addHandler(logging.StreamHandler(stream=sys.stdout))
这修复了我的 red PyCharm日志。
答案 4 :(得分:0)
为我解决的问题(在PyCharm 2017.2上)是Preferences -> Editor -> Color Scheme -> Console Colors
并改变了Console -> Error output
的颜色。当然这也会改变错误颜色,但至少你不会一直看到红色......
答案 5 :(得分:0)
我发现了以下解决方案。显然Pycharm重定向sys.stdout。来自sys module documentation:
sys.__stdin__
sys.__stdout__
sys.__stderr__
这些对象包含stdin,stderr和stdout的原始值 在计划开始时。它们在定稿期间使用,并且 无论是否打印到实际的标准流都有用 sys.std *对象已被重定向。
它还可用于将实际文件还原到已知工作文件 对象,以防它们被破坏的对象覆盖。 但是,执行此操作的首选方法是明确保存 替换之前的上一个流,并恢复保存的对象。
因此,要解决此问题,您可以将输出重定向到sys.__stdout__
。我的log_config.yml的配置示例:
console:
class: logging.StreamHandler
level: DEBUG
stream: "ext://sys.__stdout__"
formatter: colorFormatter
答案 6 :(得分:0)
PyCharm 2019.1.1 (适用于Windows 10、1709)-运行snippet-正常运行。
错误: setFormatter -不起作用。
修复:在第67行进行更改,并在第70-71行摆脱(添加未格式化的处理程序)。
self.stream.write(record.msg + "\n", color)
到
self.stream.write(self.format(record) + "\n", color)
第70-71行可以在手动文件运行结构下移动以节省测试能力:
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进行了比较:
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)
...