PyCharm记录输出颜色

时间:2013-12-02 16:58:45

标签: python google-app-engine logging pycharm

我正在使用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!')

但颜色是一样的。

PyCharm run console output

编辑:

JetBrains issue tracker的回复:将片段的第55行从sys.stderr更改为sys.stdout。 stderr流总是用红色着色而stdout不是。

现在正确显示颜色。

7 个答案:

答案 0 :(得分:24)

PyCharm本身不支持该功能,但您可以下载Grep Console plugin并根据需要设置颜色。

这是一个截图: http://plugins.jetbrains.com/files/7125/screenshot_14104.png (链接已死)

我希望它有所帮助:)尽管它没有提供完全彩色化的控制台,但它迈出了一步。

答案 1 :(得分:22)

至少从PyCharm 2017.2开始,你可以通过启用:

来实现这一点

运行|编辑配置... |配置|在输出控制台中模拟终端

Run configuration

enter image description here

答案 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)
...