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) 不禁用系统日志的主要内容,如果未能解决你的问题,请参考以下文章