Skip to main content

35.13. syslog — Unix系统日志库例程


此模块提供了一个到Unix syslog 库例程的接口。有关 syslog 设施的详细说明,请参阅Unix手册页。

此模块包装系统 syslog 系列例程。可以与syslog服务器通信的纯Python库在 logging.handlers 模块中可用作 SysLogHandler

该模块定义了以下功能:

syslog.syslog(message)
syslog.syslog(priority, message)

将字符串 message 发送到系统记录器。如有必要,添加尾随换行符。每个消息被标记有由 facilitylevel 组成的优先级。可选的 priority 参数(默认为 LOG_INFO)确定消息优先级。如果设施未在使用逻辑或(LOG_INFO | LOG_USER)的 priority 中编码,则使用 openlog() 调用中给出的值。

如果在调用 syslog() 之前没有调用 openlog(),则将调用没有参数的 openlog()

syslog.openlog([ident[, logoption[, facility]]])

可以通过调用 openlog() 来设置后续 syslog() 呼叫的日志记录选项。如果日志当前未打开,syslog() 将调用 openlog(),无参数。

可选的 ident 关键字参数是一个字符串,附加在每个消息前面,默认为 sys.argv[0],前导路径部分被剥离。可选的 logoption 关键字参数(默认值为0)是一个位字段 - 请参阅下面的可能的值组合。可选的 facility 关键字参数(默认值为 LOG_USER)为没有显式编码的消息设置默认工具。

在 3.2 版更改: 在以前的版本中,不允许使用关键字参数,并且需要 identident 的默认值取决于系统库,通常是 python,而不是python程序文件的名称。

syslog.closelog()

重置syslog模块值并调用系统库 closelog()

这将导致模块在初始导入时的行为。例如,openlog() 将在第一个 syslog() 调用(如果 openlog() 尚未被调用)时被调用,并且 ident 和其他 openlog() 参数被重置为默认值。

syslog.setlogmask(maskpri)

将优先级掩码设置为 maskpri,并返回上一个掩码值。对 maskpri 中未设置优先级的 syslog() 的呼叫将被忽略。默认为记录所有优先级。函数 LOG_MASK(pri) 计算单个优先级 pri 的掩码。函数 LOG_UPTO(pri) 计算所有优先级的掩码,直到并包括 pri

模块定义以下常量:

优先级(从高到低):

LOG_EMERGLOG_ALERTLOG_CRITLOG_ERRLOG_WARNINGLOG_NOTICELOG_INFOLOG_DEBUG

设备:

LOG_KERNLOG_USERLOG_MAILLOG_DAEMONLOG_AUTHLOG_LPRLOG_NEWSLOG_UUCPLOG_CRONLOG_SYSLOGLOG_LOCAL0LOG_LOCAL7,如果在 <syslog.h>LOG_AUTHPRIV 中定义。

日志选项:

LOG_PIDLOG_CONSLOG_NDELAY,并且如果在 <syslog.h>LOG_ODELAYLOG_NOWAITLOG_PERROR 中定义的话。

35.13.1. 例子

35.13.1.1. 简单的例子

一组简单的例子:

import syslog

syslog.syslog('Processing started')
if error:
    syslog.syslog(syslog.LOG_ERR, 'Processing started')

设置一些日志选项的示例包括记录消息中的进程ID,并将消息写入用于邮件日志记录的目标设施:

syslog.openlog(logoption=syslog.LOG_PID, facility=syslog.LOG_MAIL)
syslog.syslog('E-mail processing initiated...')