如何为 Python 日志记录输出着色?

新手上路,请多包涵

前段时间看到一个Mono应用,输出是彩色的,估计是因为它的日志系统(因为所有的消息都是标准化的)。

现在,Python 有 logging 模块,它允许您指定很多选项来自定义输出。所以,我想用 Python 可以做类似的事情,但我无法在任何地方找到如何做到这一点。

有什么办法可以使 Python logging 模块以彩色输出?

我想要的(例如)红色的错误,蓝色或黄色的调试消息,等等。

当然,这可能需要一个兼容的终端(大多数现代终端都是);但如果不支持颜色,我可以回退到原始 logging 输出。

关于如何使用日志记录模块获得彩色输出的任何想法?

原文由 airmind 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 738
1 个回答

Python 3 解决方案,不需要额外的包

定义一个类

import logging

class CustomFormatter(logging.Formatter):

    grey = "\x1b[38;20m"
    yellow = "\x1b[33;20m"
    red = "\x1b[31;20m"
    bold_red = "\x1b[31;1m"
    reset = "\x1b[0m"
    format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s (%(filename)s:%(lineno)d)"

    FORMATS = {
        logging.DEBUG: grey + format + reset,
        logging.INFO: grey + format + reset,
        logging.WARNING: yellow + format + reset,
        logging.ERROR: red + format + reset,
        logging.CRITICAL: bold_red + format + reset
    }

    def format(self, record):
        log_fmt = self.FORMATS.get(record.levelno)
        formatter = logging.Formatter(log_fmt)
        return formatter.format(record)

实例化记录器

# create logger with 'spam_application'
logger = logging.getLogger("My_app")
logger.setLevel(logging.DEBUG)

# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

ch.setFormatter(CustomFormatter())

logger.addHandler(ch)

并使用!

 logger.debug("debug message")
logger.info("info message")
logger.warning("warning message")
logger.error("error message")
logger.critical("critical message")

结果 在此处输入图像描述

完整的配色方案 在此处输入图像描述

对于窗户

此解决方案适用于 Mac OS、IDE 终端。看起来 Windows 命令提示符默认情况下根本没有颜色。以下是有关如何启用它们的说明,我还没有尝试过 https://www.howtogeek.com/322432/how-to-customize-your-command-prompts-color-scheme-with-microsofts-colortool/

原文由 Sergey Pleshakov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题