15.9. logging.handlers —记录处理程序

Important

此页面仅包含参考信息。有关教程,请参阅

源代码: Lib/logging/handlers.py


软件包中提供了以下有用的处理程序。请注意,其中三个处理程序(StreamHandlerFileHandlerNullHandler)实际上是在logging模块本身中定义的,但已在此处与其他处理程序一起进行了说明。

15.9.1. StreamHandler

位于核心logging包中的StreamHandler类将日志记录输出发送到流,例如* sys.stdout sys.stderr *或任何类似文件的对象(或更准确地说,是任何支持write()flush()方法的对象) 。

15.9.2. FileHandler

位于核心logging软件包中的FileHandler类将日志记录输出发送到磁盘文件。它继承了StreamHandler的输出Function。

在 2.6 版中进行了更改:添加了* delay *。

15.9.3. NullHandler

2.7 版的新Function。

位于核心logging程序包中的NullHandler类不进行任何格式化或输出。本质上,它是供库开发人员使用的“无操作”处理程序。

有关如何使用NullHandler的更多信息,请参见配置库的日志记录

15.9.4. WatchedFileHandler

2.6 版的新Function。

位于logging.handlers模块中的WatchedFileHandler类是FileHandler,它监视正在记录的文件。如果文件更改,则使用文件名将其关闭并重新打开。

由于使用诸如* newsyslog logrotate *之类的程序来执行日志文件轮换,因此可能会发生文件更改。该处理程序旨在在 Unix/Linux 下使用,它监视文件以查看自上一次发出以来是否已更改。 (如果文件的设备或 inode 发生更改,则认为该文件已更改.)如果文件已更改,则关闭旧文件流,并打开该文件以获取新的流。

该处理程序不适用于 Windows,因为在 Windows 下无法移动或重命名打开的日志文件-日志记录使用排他锁打开文件-因此不需要这种处理程序。此外,Windows 下不支持* ST_INO *; stat()始终为此值返回零。

15.9.5. RotatingFileHandler

位于logging.handlers模块中的RotatingFileHandler类支持旋转磁盘日志文件。

您可以使用* maxBytes backupCount 值来允许文件以 sched 大小翻转*。当将要超过该大小时,将关闭该文件,并以静默方式打开一个新文件以进行输出。只要当前日志文件的长度接近* maxBytes ,就会发生翻转。如果 maxBytes backupCount 中的任何一个为零,则永远不会发生翻转。如果 backupCount 不为零,则系统将pass在文件名后附加 extensions'.1','.2'等来保存旧的日志文件。例如,如果 backupCount *为 5 且基本文件名为app.log,则您将得到app.logapp.log.1app.log.2,最大为app.log.5。写入的文件始终为app.log。填充此文件后,将其关闭并重命名为app.log.1,如果存在文件app.log.1app.log.2等,则分别将它们重命名为app.log.2app.log.3等。

在 2.6 版中进行了更改:添加了* delay *。

15.9.6. TimedRotatingFileHandler

位于logging.handlers模块中的TimedRotatingFileHandler类支持按特定的时间间隔旋转磁盘日志文件。

您可以使用* when 来指定 interval *的类型。可能值的列表如下。请注意,它们不区分大小写。

Value 间隔类型
'S' Seconds
'M' Minutes
'H' Hours
'D' Days
'W0'-'W6' Weekday (0=Monday)
'midnight' 午夜翻转

使用基于工作日的轮播时,将“ W0”指定为星期一,将“ W1”指定为星期二,依此类推,直到“ W6”指定为星期日。在这种情况下,不使用为* interval *传递的值。

系统将pass在文件名后附加 extensions 来保存旧的日志文件。extensions 是基于日期和时间的,使用 strftime 格式%Y-%m-%d_%H-%M-%S或其前导部分,具体取决于过渡间隔。

首次(在创建处理程序时)计算下一个过渡时间时,将使用现有日志文件的最后修改时间或当前时间来计算何时发生下一个轮换。

如果* utc *参数为 true,则将使用 UTC 时间;否则使用当地时间。

如果* backupCount 不为零,则最多将保留 backupCount *文件,并且如果发生翻转时将创建更多文件,则最早的文件将被删除。删除逻辑使用间隔来确定要删除的文件,因此更改间隔可能会使旧文件留下来。

如果* delay *为 true,则将文件打开时间推迟到第一次调用emit()时。

在 2.6 版中进行了更改:添加了* delay utc *。

15.9.7. SocketHandler

位于logging.handlers模块中的SocketHandler类将日志记录输出发送到网络套接字。Base Class 使用 TCP 套接字。

请注意,pickle 并不完全安全。如果您担心安全性,则可能需要重写此方法以实现更安全的机制。例如,您可以使用 HMAC 对 pickle 进行签名,然后在接收端对其进行验证,或者,可以在接收端禁用对全局对象的取消 Pickling。

此行为由以下处理程序属性控制:

这意味着,如果在使用处理程序之后*远程侦听器启动,则可能会丢失消息(因为在延迟时间过去之前,处理程序甚至不会try连接,而只是在延迟期间静默删除消息)。

15.9.8. DatagramHandler

位于logging.handlers模块中的DatagramHandler类继承自SocketHandler,以支持pass UDP 套接字发送日志记录消息。

15.9.9. SysLogHandler

位于logging.handlers模块中的SysLogHandler类支持将日志消息发送到远程或本地 Unix syslog。

请注意,如果您的服务器未在 UDP 端口 514 上侦听,则SysLogHandler可能无法正常工作。在这种情况下,请检查域套接字应使用的地址-它与系统有关。例如,在 Linux 上通常是“/dev/log”,在 OS/X 上通常是“/var/run/syslog”。您需要检查平台并使用适当的地址(如果您的应用程序需要在多个平台上运行,则可能需要在运行时进行此检查)。在 Windows 上,您几乎必须使用 UDP 选项。

在 2.7 版中进行了更改:添加了* socktype *。

符号LOG_的值在SysLogHandler中定义,并镜像sys/syslog.h头文件中定义的值。

Priorities

Name (string) Symbolic value
alert LOG_ALERT
critcritical LOG_CRIT
debug LOG_DEBUG
emergpanic LOG_EMERG
errerror LOG_ERR
info LOG_INFO
notice LOG_NOTICE
warnwarning LOG_WARNING

Facilities

Name (string) Symbolic value
auth LOG_AUTH
authpriv LOG_AUTHPRIV
cron LOG_CRON
daemon LOG_DAEMON
ftp LOG_FTP
kern LOG_KERN
lpr LOG_LPR
mail LOG_MAIL
news LOG_NEWS
syslog LOG_SYSLOG
user LOG_USER
uucp LOG_UUCP
local0 LOG_LOCAL0
local1 LOG_LOCAL1
local2 LOG_LOCAL2
local3 LOG_LOCAL3
local4 LOG_LOCAL4
local5 LOG_LOCAL5
local6 LOG_LOCAL6
local7 LOG_LOCAL7

15.9.10. NTEventLogHandler

位于logging.handlers模块中的NTEventLogHandler类支持将日志消息发送到本地 Windows NT,Windows 2000 或 Windows XP 事件日志。在使用它之前,您需要安装 Mark Hammond 的 Python Win32 扩展。

15.9.11. SMTPHandler

位于logging.handlers模块中的SMTPHandler类支持pass SMTP 将日志消息发送到电子邮件地址。

要指定使用安全协议(TLS),请将 Tuples 传递给* secure *参数。仅在提供身份验证凭据时使用。该 Tuples 应该是一个空 Tuples,或者是一个具有密钥文件名的单值 Tuples,或者是一个具有密钥文件和证书文件名的二值 Tuples。 (此 Tuples 传递给smtplib.SMTP.starttls()方法。)

在 2.6 版中进行了更改:添加了* credentials *。

在 2.7 版中进行了更改:添加了“安全”。

15.9.12. MemoryHandler

位于logging.handlers模块中的MemoryHandler类支持在内存中缓冲日志记录,并定期将其刷新到* target *处理程序。只要缓冲区已满,或者看到某种严重程度或更严重的事件,就会发生刷新。

MemoryHandler是更通用的BufferingHandler的子类,BufferingHandler是抽象类。这会将日志记录缓冲在内存中。每当将每条记录添加到缓冲区时,都会pass调用shouldFlush()进行检查以查看是否应刷新缓冲区。如果应该,则应flush()进行冲洗。

15.9.13. HTTPHandler

位于logging.handlers模块中的HTTPHandler类支持使用GETPOST语义将日志消息发送到 Web 服务器。

Note

由于准备将记录发送到 Web 服务器的记录与通用格式设置操作不同,因此使用setFormatter()HTTPHandler指定Formatter无效。该处理程序不是调用format()而是调用mapLogRecord(),然后调用urllib.urlencode(),以适合于发送到 Web 服务器的形式对字典进行编码。

See also

  • Module logging

  • 日志记录模块的 API 参考。

  • Module logging.config

  • 日志记录模块的配置 API。

首页