为Python的日志模块提供彩色终端输出
项目描述
coloredlogs 软件包允许Python的 logging 模块输出彩色终端。 ColoredFormatter 类从 logging.Formatter 继承,并使用 ANSI转义序列 来渲染彩色日志消息。它只使用标准颜色,因此应该可以在任何UNIX终端上工作。目前已在Python 2.7,3.5+ 和 PyPy(2 和 3)上进行了测试。在Windows上,coloredlogs 会自动尝试启用原生ANSI支持(在最新的Windows 10安装上),如果已安装则会回退到使用 colorama。以下是执行 coloredlogs --demo 命令时打印的演示截图
请注意,上面的截图包含了由我的 verboselogs 包定义的自定义日志级别:如果你同时安装了 coloredlogs 和 verboselogs,它将直接工作(当然,使用 coloredlogs 不需要 verboselogs)。
安装
coloredlogs 包可在 PyPI 上找到,这意味着安装应该非常简单
$ pip install coloredlogs
实际上,安装Python包有多种方式(例如,每个用户的站点包目录、虚拟环境 或仅安装系统级)我无意在这里进行讨论,所以如果你感到害怕,请在返回这些说明之前查阅你的选项哦 😉。
可选依赖
Windows上的原生ANSI支持需要安装最新的Windows 10。如果这对您不起作用,请考虑安装 colorama 包
$ pip install colorama
一旦安装了 colorama,它将自动使用。
用法
以下是一个示例,说明如何轻松开始使用
import coloredlogs, 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.
coloredlogs.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.
coloredlogs.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")
日志消息的格式
ColoredFormatter 类支持用户定义的日志格式,因此您可以使用任何喜欢的日志格式。默认的日志格式如下
%(asctime)s %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s
此日志格式会产生以下输出
2015-10-23 03:32:22 peter-macbook coloredlogs.demo[30462] DEBUG message with level 'debug' 2015-10-23 03:32:23 peter-macbook coloredlogs.demo[30462] VERBOSE message with level 'verbose' 2015-10-23 03:32:24 peter-macbook coloredlogs.demo[30462] INFO message with level 'info' ...
您可以使用环境变量以及编程方式自定义日志格式和样式,有关详细信息,请参阅 在线文档。
启用毫秒级精度
如果您从 logging.basicConfig() 切换到 coloredlogs.install(),您可能会注意到时间戳不再包括毫秒。这是因为coloredlogs不会在时间戳中输出毫秒,除非您明确要求。这里有三种方法可以做到这一点
简单的方法是将 milliseconds 参数传递给 coloredlogs.install()
coloredlogs.install(milliseconds=True)
或者,您可以更改日志格式 以包含‘msecs’
%(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s
以下是对 coloredlogs.install() 的调用示例
coloredlogs.install(fmt='%(asctime)s,%(msecs)03d %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s')
自定义日志格式还允许您更改分隔秒和毫秒的分隔符(上面的是逗号)。这在 版本 3.0 中成为可能,该版本添加了对用户定义日志格式的支持。
如果使用 %(msecs)d 不够灵活,您可以在日期/时间格式中添加 %f,它将被替换为 %(msecs)03d 的值。对 %f 指令的支持添加到 版本 9.3(由于 #45)。
自定义日志字段
以下自定义日志格式字段受支持
%(hostname)s 提供了本地系统的主机名。
%(programname)s 提供了当前正在运行的程序名称。
%(username)s 提供了当前登录用户的用户名。
当 coloredlogs.install() 检测到格式字符串中使用了这些字段中的任何一个时,相关的 logging.Filter 子类会自动注册以填充相关的日志记录字段。
更改文本样式和颜色
在线文档包含了一个 自定义文本样式和颜色的示例。
从cron输出彩色
当在 cron 任务中使用 coloredlogs 时,cron 发送给您的输出邮件将不包含任何 ANSI 转义序列,因为 coloredlogs 意识到它未连接到交互式终端。如果您希望 cron 发送的邮件包含颜色,有两种方法可以实现:
修改您的crontab
以下是一个基本的 crontab 示例:
MAILTO="your-email-address@here" CONTENT_TYPE="text/html" * * * * * root coloredlogs --to-html your-command
在安装 coloredlogs Python 包时,会安装 coloredlogs 程序。当您执行 coloredlogs --to-html your-command 时,它将在外部程序 script 下运行 your-command(您需要安装此程序)。这使得 your-command 认为自己连接到了交互式终端,这意味着它将输出 ANSI 转义序列,然后由 coloredlogs 程序将其转换为 HTML。是的,这有点复杂,但效果很好 :-)
修改您的Python代码
ColoredCronMailer 类提供了一个上下文管理器,当在 crontab 中正确设置 $CONTENT_TYPE 变量时,它会自动启用 HTML 输出。
这需要我的 capturer 包,您可以使用 pip install 'coloredlogs[cron]' 安装它。[cron] 扩展会引入 capturer 2.4 或更高版本,这是捕获输出同时静音所必需的 - 否则,您会在由 cron 发送的电子邮件中收到重复的输出。
上下文管理器还可以用于回溯性地静音已生成的输出,这可以用于避免发送无用信息的 cron 作业,但每隔几分钟还是将输出发送给系统管理员。
联系
coloredlogs 的最新版本可在 PyPI 和 GitHub 上获取。在线文档可在 Read The Docs 上找到,包括一个 变更日志。有关错误报告,请在 GitHub 上创建一个问题。如果您有任何问题或建议,请随时通过 peter@peterodding.com 发送电子邮件给我。
许可
本软件许可协议为 MIT 许可证。
© 2020 Peter Odding。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
coloredlogs-15.0.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0 |
|
MD5 | 6f68f57a8a1fa0359b4957896fda4cf7 |
|
BLAKE2b-256 | ccc7eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325 |
coloredlogs-15.0.1-py2.py3-none-any.whl的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934 |
|
MD5 | 608499c232d5cabf7145201a26db2191 |
|
BLAKE2b-256 | a7063d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd |