logzero 库使日志记录像 print 语句一样简单,这是一个非常了不起的简单性。我不确定 logzero 的命名是否是为了配合像 pygame-zero、GPIO Zero 和 guizero 这样的 "零样板" 系列库,但它肯定属于这一类。它是一个 Python 库,使日志记录变得简单明了。
你可以像使用 print 语句一样,使用它的基本日志记录到 stdout 进行信息和调试,并且它具有平滑的学习曲线,可以进行更高级的日志记录,例如将日志记录到文件中。
首先,使用 pip 安装 logzero
$ sudo pip3 install logzero
现在,在 Python 文件中,导入 logger 并尝试以下一个或所有日志记录示例
from logzero import logger
logger.debug("hello")
logger.info("info")
logger.warning("warning")
logger.error("error")
输出会自动着色,易于阅读

所以现在,不要使用 print 来了解发生了什么,而是使用 logger,并设置相关的日志级别。
在 Python 中将日志写入文件
如果你只读到这里,并在编写代码的方式上做出一个改变,对我来说就足够了。如果你想更进一步,请继续阅读!
写入 stdout 对于测试新程序很有趣,但只有在你登录到运行脚本的计算机上时才有用。很多时候,在使用应用程序时,你会希望远程执行代码并在事后查看错误。这时将日志记录到文件就很有用了。让我们试试看
from logzero import logger, logfile
logfile('/home/pi/test.log')
现在你的日志条目将被记录到 test.log 文件中。请记住,确保 脚本有权限 写入该文件及其目录结构。
你也可以指定更多选项
logfile(’/home/pi/test.log’, maxBytes=1e6, backupCount=3)
现在,当提供给 logfile 的文件达到 1MB (1×106 字节) 时,它将在 test.log.1、test.log.2 等之间轮换条目。这种行为很好,可以避免生成一个巨大的日志文件,这对系统打开和关闭来说是 I/O 密集型的。你可能还想像专业人士一样记录到 /var/log。假设你在 Linux 上,你 一个目录 并使你的用户成为所有者,以便他们可以写入它
$ sudo mkdir /var/log/test
$ sudo chown pi /var/log/test
然后在你的 Python 代码中,更改 logfile 路径
logfile(’/var/log/test/test.log’, maxBytes=1e6, backupCount=3)
当涉及到在你的 logfile 中捕获异常时,你可以使用 logging.exception:
try:
c = a / b
except Exception as e:
logger.exception(e)
这将产生以下结果 (如果 b 为零)
[E 190422 23:41:59 test:9] division by zero
Traceback (most recent call last):
File "test.py", line 7, in
c = a / b
ZeroDivisionError: division by zero
你将获得日志条目,然后是完整的追溯。或者,你可以使用 logging.error 并隐藏追溯
try:
c = a / b
except Exception as e:
logger.error(f"{e.__class__.__name__}: {e}")
现在这将产生更简洁的
[E 190423 00:04:16 test:9] ZeroDivisionError: division by zero

在 logzero.readthedocs.io 的文档中,你可以阅读到更多选项。
logzero 在教育方面表现出色
对于新程序员来说,日志记录可能是一个具有挑战性的概念。大多数框架依赖于流程控制和大量的变量操作来生成有意义的日志,但 logzero 是不同的。它的语法类似于 print 语句,因此对于教育来说是一个巨大的胜利,因为它避免了解释另一个概念。在你的下一个项目中尝试一下。
--
本文最初写在 我的博客 上,并经许可重新发表。
3 条评论