Python 2.7: setlogmask(0) 不禁用系统日志

Python 2.7: setlogmask(0) not disabling syslog

我是Python新手,下面的代码写了下面的消息给/var/log/syslog

May  8 22:14:22.531833 almach <info>./test.txt: HELLO 01
May  8 22:14:22.531853 almach <info>./test.txt: HELLO 02
May  8 22:14:22.531860 almach <info>./test.txt: HELLO 03

那么,为什么

  1. 消息被写入 /var/log/syslog 而不是 ./test.txt?

  2. setlogmask(0) 无效,消息 "HELLO 02" 已写入 syslog?

此外,我在 Linux 机器上测试了代码,该机器有 demon rsyslogd 运行,它可能以某种方式影响了我的代码。

from syslog import syslog, setlogmask, LOG_INFO, openlog

openlog('./test.txt')

syslog(LOG_INFO, "HELLO 01")

setlogmask(0)
syslog(LOG_INFO, "HELLO 02")

setlogmask(255)
syslog(LOG_INFO, "HELLO 03")

来自 syslog.openlog 手册:

The optional ident keyword argument is a string which is prepended to every message, and defaults to sys.argv[0] with leading path components stripped

要将日志保存在单独的文件中,请使用 logging.handlers.SysLogHandlerHow to configure logging to syslog in Python?

您需要使用 LOG_MASK(0) 来避免写入 HELLO 02 并且在写入 HELLO 03:

之前记住掩码的先前值以恢复它
from syslog import syslog, setlogmask, LOG_INFO, LOG_MASK, openlog

openlog('./test.txt')

syslog(LOG_INFO, "HELLO 01")

mask = setlogmask(LOG_MASK(0))
syslog(LOG_INFO, "HELLO 02")

setlogmask(mask)
syslog(LOG_INFO, "HELLO 03")

结果/var/log/syslog

May  9 01:49:39 sanyash-ub16 ./test.txt: HELLO 01
May  9 01:49:39 sanyash-ub16 ./test.txt: HELLO 03