【问题标题】:PyCharm logging output coloursPyCharm 记录输出颜色
【发布时间】:2013-12-18 11:29:05
【问题描述】:

我正在使用 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 的回复:将 sn-p 的第 55 行从 sys.stderr 更改为 sys.stdout。 stderr 流总是用红色着色,而 stdout 则不是。

现在颜色可以正确显示了。

【问题讨论】:

  • PyCharm 的种类和版本是什么?
  • PyCharm Pro v3.0.2 for Mac OS X
  • 所引用的 sn-p 下线了(xsnippet.org 可能也是如此?) - 你能解释一下你在哪里将 sys.stderr 更改为 sys.stdout 吗?
  • 在您的日志记录配置的处理程序定义中,您也可以简单地添加 'stream': sys.stdout 来实现此目的

标签: python google-app-engine logging pycharm


【解决方案1】:

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

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

【讨论】:

  • 我在这个截图中使用了coloredlogs 包。
  • 请注意,仅当您在列表视图中选择了“Python”时,指示的复选框才会显示。其他运行类型没有此选项。
  • 在 pycharm 2020 中不可用
  • @vozman 我有 pycharm 2020,它就在那里,只是显示的与屏幕截图中的不完全相同。
  • 你能分享一下现在哪里可以买到吗?
【解决方案2】:

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

这是一个屏幕截图: http://plugins.jetbrains.com/files/7125/screenshot_14104.png(链接失效)

我希望它有所帮助 :) 虽然它没有提供完全彩色的控制台,但它是朝着它迈出的一步。

【讨论】:

  • 这个插件很棒!正是我想要的。我也很喜欢“过滤掉”选项。
  • 插件很棒。为我解决了这个问题。
【解决方案3】:

聚会迟到了,但其他人有这个问题,这是对我有用的解决方案:

import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

来自this answer

【讨论】:

    【解决方案4】:

    9 月。 2019:PyCharm 社区 2019.1

    PyCharm 为所有日志着色,包括 红色的信息/调试。

    结果是:这不是 PyCharm 问题,这是默认 logging 的配置方式。 写到sys.stderr 的所有内容都由 PyCharm 着色为 红色。 使用不带参数的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 日志。

    【讨论】:

      【解决方案5】:

      为我解决了这个问题(在 PyCharm 2017.2 上)是转到 Preferences -> Editor -> Color Scheme -> Console Colors 并更改 Console -> Error output 的颜色。当然这也会改变错误颜色,但至少你不会一直看到红色......

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          我发现了以下解决方案。显然 Pycharm 重定向 sys.stdout。来自sys module documentation

          sys.__stdin__
          sys.__stdout__
          sys.__stderr__
          

          这些对象包含标准输入、标准错误和标准输出的原始值 在程序开始时。它们在最终确定期间使用,并且 无论是否打印到实际的标准流,都可能很有用 sys.std* 对象已被重定向。

          它还可以用于将实际文件恢复为已知的工作文件 对象,以防它们被损坏的对象覆盖。 但是,执行此操作的首选方法是显式保存 替换之前的上一个流,并恢复保存的对象。

          因此,要解决此问题,您可以将输出重定向到 sys.__stdout__。我的 log_config.yml 中的示例配置:

          console:
            class: logging.StreamHandler
            level: DEBUG
            stream: "ext://sys.__stdout__"
            formatter: colorFormatter
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-07-27
            • 2014-07-01
            • 1970-01-01
            • 2016-07-27
            • 2022-01-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多