跳转到主要内容

为Python的日志模块提供彩色终端输出

项目描述

注意:这是对伟大的python-colouredlogs项目的恶搞。请使用该包,因为我目前没有计划维护这个版本。我所做的一切就是 替换/color/colour/g

colouredlogs 包为 Python 的 logging 模块提供了彩色终端输出功能。ColouredFormatter 类继承自 logging.Formatter 并使用 ANSI 转义序列 来渲染您的日志消息,使其具有颜色。它只使用标准颜色,因此应在任何 UNIX 终端上工作。它目前在 Python 2.6、2.7、3.4、3.5、3.6 和 PyPy 上进行了测试。在 Windows 上,colouredlogs 自动引入 Colourama 作为依赖项,并使用 Colourama 来启用 ANSI 转义序列翻译。以下是执行 colouredlogs --demo 命令时打印的演示截图。

https://colouredlogs.readthedocs.io/en/latest/_images/defaults.png

请注意,上面的截图包括我 verboselogs 包定义的自定义日志级别:如果您同时安装了 colouredlogsverboselogs,则它将正常工作(当然,使用 colouredlogs 不需要 verboselogs)。

安装

colouredlogs 包可在 PyPI 上找到,这意味着安装应该像这样简单

$ pip install colouredlogs

实际上有无数种安装 Python 包的方法(例如,用户 site-packages 目录、虚拟环境或仅全局安装),我无意在这里讨论这些,所以如果您感到害怕,请在返回这些说明之前阅读有关选项的信息 ;-)

使用方法

以下是开始使用的一个例子

import colouredlogs, logging

# Create a logger object.
logger = logging.getLogger(__name__)

# By default the install() function installs a handler on the root logger,
# this means that log messages from your code and log messages from the
# libraries that you use will all show up on the terminal.
colouredlogs.install(level='DEBUG')

# If you don't want to see log messages from libraries, you can pass a
# specific logger object to the install() function. In this case only log
# messages originating from that logger will show up on the terminal.
colouredlogs.install(level='DEBUG', logger=logger)

# Some examples.
logger.debug("this is a debugging message")
logger.info("this is an informational message")
logger.warning("this is a warning message")
logger.error("this is an error message")
logger.critical("this is a critical message")

日志消息的格式

ColouredFormatter 类支持用户定义的日志格式,因此您可以使用您喜欢的任何日志格式。默认的日志格式如下

%(asctime)s %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s

此日志格式将产生以下输出

2015-10-23 03:32:22 peter-macbook colouredlogs.demo[30462] DEBUG message with level 'debug'
2015-10-23 03:32:23 peter-macbook colouredlogs.demo[30462] VERBOSE message with level 'verbose'
2015-10-23 03:32:24 peter-macbook colouredlogs.demo[30462] INFO message with level 'info'
...

您可以使用环境变量以及编程方式来自定义日志格式和样式,有关详细信息,请参阅 在线文档

启用毫秒精度

如果您从 logging.basicConfig() 切换到 colouredlogs.install(),您可能会注意到时间戳不再包含毫秒。这是因为除非您明确告诉它,否则 colouredlogs 不会在时间戳中输出毫秒。有三种方法可以做到这一点

  1. 简单的方法是将 milliseconds 参数传递给 colouredlogs.install()

    colouredlogs.install(milliseconds=True)

    这自 7.1 版本开始支持(由于 #16)。

  2. 或者,您可以更改日志格式以 包含 'msecs'

    %(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s

    那么 colouredlogs.install() 的调用将如下所示

    colouredlogs.install(fmt='%(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s')

    自定义日志格式还允许您更改分隔秒和毫秒的定界符(上面的逗号)。这自 3.0 版本开始支持,该版本添加了用户定义的日志格式支持。

  3. 如果 %(msecs)d 的使用不够灵活,您可以将 %f 添加到日期/时间格式中,它将被替换为 %(msecs)03d 的值。对 %f 指令的支持自 9.3 版本开始添加(由于 #45)。

更改文本样式和颜色

在线文档中包含了一个自定义文本样式和颜色的示例

cron 中的彩色输出

当在cron任务中使用colouredlogs时,cron发送给你的电子邮件输出不会包含任何ANSI转义序列,因为colouredlogs意识到它并未连接到交互式终端。如果你想通过cron发送带有颜色的电子邮件,有两种方法可以实现

修改您的 crontab

以下是一个简单的crontab示例

MAILTO="your-email-address@here"
CONTENT_TYPE="text/html"
* * * * * root colouredlogs --to-html your-command

当你安装colouredlogs Python包时,会安装colouredlogs程序。当你执行colouredlogs --to-html your-command时,它将在外部程序script(你需要安装此程序)下运行your-command。这使得your-command认为它连接到了交互式终端,这意味着它会输出ANSI转义序列,然后由colouredlogs程序将其转换为HTML。是的,这有点复杂,但效果很好 :-)

修改您的 Python 代码

ColouredCronMailer类提供了一个上下文管理器,当在crontab中正确设置了$CONTENT_TYPE变量时,它会自动启用HTML输出。

这需要我的capturer包,你可以使用pip install 'colouredlogs[cron]'来安装它。[cron]扩展将引入capturer 2.4或更高版本,这是捕获输出同时静音输出的要求 - 否则,你会在由cron发送的电子邮件中收到重复的输出。

上下文管理器还可以用于静音已经生成的输出,这可以用来避免那些虽然没有什么有用的任务但每几分钟还是会向系统管理员发送输出的垃圾cron任务 :-).

联系方式

colouredlogs的最新版本可在PyPIGitHub上找到。在线文档可在Read The Docs上查看,包括变更日志。对于错误报告,请在GitHub上创建一个问题。如果您有任何问题、建议等,请随时通过peter@peterodding.com给我发电子邮件。

许可

本软件受MIT许可协议约束。

© 2018 Peter Odding。

下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。

源代码分发

colouredlogs-10.0.1.tar.gz (272.9 kB 查看哈希值)

上传时间: 源代码

构建分发

colouredlogs-10.0.1-py2.py3-none-any.whl (43.9 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页