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

Posted

技术标签:

【中文标题】Python 2.7:setlogmask(0) 不禁用系统日志【英文标题】:Python 2.7: setlogmask(0) not disabling syslog 【发布时间】:2019-09-26 17:24:13 【问题描述】:

我是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

那么,为什么

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

    setlogmask(0) 无效,消息“HELLO 02”已写入 syslog?

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

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")

【问题讨论】:

你不能setlogmask(0)。掩码必须是symbolic constants 的按位组合。 【参考方案1】:

你需要使用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")

结果为@​​987654325@:

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

【讨论】:

【参考方案2】:

来自syslog.openlog手册:

可选的 ident 关键字参数是附加到每条消息的字符串,默认为 sys.argv[0],去除了前导路径组件

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

【讨论】:

以上是关于Python 2.7:setlogmask(0) 不禁用系统日志的主要内容,如果未能解决你的问题,请参考以下文章

CentOS安装python-2.7+安装pip-10.0.0

安装python 2.7条件下的pip环境

Python 2.7 和 Spyder 3.0

Python数据结构与算法(2.7)——跳表

python 2.7:从集合列表创建字典

App Engine Python 2.7 - ImportError:无法导入名称 apiproxy