目录
Kivy 日志记录¶
默认情况下,Kivy 提供了一个基于标准 Python logging 模块的日志系统,并增加了若干旨在提高便利性的额外功能。这些功能包括:
简化用法(单实例、简单配置、默认即可运行)
在支持的终端上显示彩色编码输出
默认情况下输出到
stderr通过冒号分隔进行消息分类
即使日志记录被禁用,也能访问日志历史。
内置处理各种跨平台考虑因素
任何写入
sys.stderr的杂散输出都会被捕获,并作为警告存储在日志文件中。
这些功能可通过配置文件或环境变量进行配置——包括回退到仅使用标准Python系统。
日志记录器对象¶
Kivy 的 Logger 类提供了一个单例的 logging.logger 实例。
除了标准的日志级别(debug、info、warning、error 和 critical)之外,还提供了一个额外的 trace 级别。
示例用法¶
像使用标准Python日志器一样使用``Logger``。:
from kivy.logger import Logger
Logger.info('title: This is a info message.')
Logger.debug('title: This is a debug message.')
try:
raise Exception('bleh')
except Exception:
Logger.exception('Something happened!')
传递给日志记录器的消息被冒号(:)分隔成两部分。第一部分用作标题,第二部分用作消息内容。这样,您可以轻松地对消息进行“分类”。
Logger.info('Application: This is a test')
# will appear as
[INFO ] [Application ] This is a test
你可以随时使用 setLevel 方法来更改日志级别。:
from kivy.logger import Logger, LOG_LEVELS
Logger.setLevel(LOG_LEVELS["debug"])
在 2.2.0 版本发生变更.
与其他日志记录的交互¶
Kivy 日志系统默认会显示来自任何日志记录器(例如第三方库)发送的所有日志消息。
可以添加额外的处理器。
警告
输出到 sys.stderr 的处理程序可能会引发循环,因为 stderr 输出会被报告为警告日志消息。
日志记录器配置¶
Kivy 日志模式¶
在最高层级上,Kivy 的日志系统由一个环境变量 KIVY_LOG_MODE 控制。它可以被设置为以下三个值之一:KIVY、PYTHON、MIXED。
KIVY 模式(默认)¶
在 KIVY 模式下,所有 Kivy 处理器都连接到根日志记录器,因此系统中的所有日志消息都会输出到 Kivy 日志文件和控制台。任何对 sys.stderr 的杂散输出都会被记录为警告。
如果你从头开始编写一个完整的Kivy应用,这是最方便的模式。
PYTHON 模式¶
在 PYTHON 模式下,不会添加任何处理器,且不会捕获 sys.stderr 输出。由客户端自行添加适当的处理器。(如果未添加任何处理器,logging 模块将把输出发送到 stderr。)
使用 Logger 记录的消息将从名为 kivy 的日志器传播到根日志器。
如果Kivy应用是一个更大的项目的一部分,而该项目有自己的日志管理机制,那么这种模式能提供最大的控制力。
kivy.logger 文件包含多个 logging.handler、logging.formatter 以及其他辅助类,使用户能够采用他们喜欢的 Kivy 日志功能,包括 stderr 重定向。
混合模式¶
在 MIXED 模式下,处理器直接添加到 Kivy 的 Logger 对象上,并关闭了传播。sys.stderr 不会被重定向。
使用Kivy的``Logger``记录的消息将出现在Kivy日志文件中,并输出到控制台。
然而,使用其他Python日志记录器记录的消息将不会被Kivy处理器处理。客户端需要自行添加相应的处理器。
如果你喜欢Kivy Logger 的功能,但正在编写一个依赖第三方库的Kivy应用,而这些库不使用冒号分隔类别或依赖记录器名称的显示,此模式提供了一个折衷方案。
同样地,kivy.logger 文件包含了可复用的日志功能,这些功能可以用来充分利用两个系统的优点。
配置文件¶
在``KIVY``和``MIXED``模式下,日志处理器可以通过Kivy配置文件进行控制:
[kivy]
log_level = info
log_enable = 1
log_dir = logs
log_name = kivy_%y-%m-%d_%_.txt
log_maxfiles = 100
关于允许值的更多信息,请参阅 kivy.config 模块中的描述。
此外,环境变量 KIVY_NO_FILELOG 和 KIVY_NO_CONSOLELOG 可用于关闭相应处理程序的安装。
日志记录器历史¶
即使日志器未启用,你仍然可以访问最近的100条LogRecords。
from kivy.logger import LoggerHistory
print(LoggerHistory.history)
- class kivy.logger.ColonSplittingLogRecord(logrecord)[源代码]¶
基类:
LogRecord克隆现有的logRecord,但如果消息字段包含冒号,则重新格式化该字段。
在 2.2.0 版本加入.
- class kivy.logger.ColoredLogRecord(logrecord)[源代码]¶
基类:
LogRecord克隆现有的logRecord,但重新格式化levelname以添加颜色,并对消息进行加粗处理(根据消息中的$BOLD和$RESET标记)。
在 2.2.0 版本加入.
- class kivy.logger.ConsoleHandler(stream=None)[源代码]¶
基类:
StreamHandler将记录发送到流(默认情况下为stderr)。
然而,如果消息以“stderr:”开头,则不会进行格式化,而是直接写入流中。
在 2.2.0 版本加入.
- class kivy.logger.KivyFormatter(*args, use_color=True, **kwargs)[源代码]¶
基类:
Formatter将消息中以冒号标记的第一个字段拆分出来,并根据情况对记录应用终端颜色代码;若彩色日志不可用,则去除颜色标记。
在 2.2.0 版本加入.
- class kivy.logger.ProcessingStream(channel, func)[源代码]¶
基类:
object类似流(stream-like)的对象,它会接收写入其中的每一行完整内容,为其添加指定前缀,并将给定的函数应用于该行。
在 2.2.0 版本加入.
- class kivy.logger.UncoloredLogRecord(logrecord)[源代码]¶
基类:
LogRecord克隆现有的logRecord,但重新格式化消息以移除$BOLD/$RESET标记。
在 2.2.0 版本加入.