如何在Mac OS X和Debian上使用SysLogHandler或syslog从Python登录到syslog(7)

韦恩·沃纳(Wayne Werner):

我已经在这里遵循了几个答案,但没有成功。

我正在使用Macbook(Yosemite)进行开发,但是我们的测试/生产盒是Debian 7(使用rsyslog)。我正在尝试以一种既可以在本地运行又无法运行的方式注销到syslog。

我尝试了使用的选项SysLogHandler在Mac上可以使用:

import logging
import logging.handlers
import syslog

h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility=syslog.LOG_LOCAL1)
h.ident = 'works_on_macs'
logger = logging.getLogger('i_am_a_lumberjack')
logger.addHandler(h)

logger.debug("And I don't care")
logger.info('There is a sale on today')
logger.warn('Do not touch the hot stove!')
logger.error('Sorry, times up')
logger.critical('That sure is an ugly tie')

这些消息将显示在我的mac syslog中。但是,当我address='/dev/log'在Debian 7上进行更改时...没有骰子。

然而:

import syslog

syslog.openlog(ident='im_a_lumberjack', facility=syslog.LOG_LOCAL1)
syslog.syslog(syslog.WARNING, 'Watch out!')

适用于Debian 7,但不适用于Mac。

我非常希望能够获得一个适用于两个平台的日志记录解决方案。显然地址会有所不同,但是我已经在config中设置了。

那么,如何使syslog在Mac Debian上都能正常工作

编辑:

作为进一步的信息-我发现我的SysLogHandler似乎没有正确使用便利(?)。消息正在被拾起的系统日志,但他们要去一个包罗万象的,这使我相信他们没有得到与标记LOG_LOCAL1

韦恩·沃纳(Wayne Werner):

事实证明facilitySysLogHandler期望不是 syslog.LOG_LOCAL1或该命名空间中的任何值。

它期望'local1'或其他字符串,如文档中所述。

只需更改

h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility=syslog.LOG_LOCAL1)

h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility='local1')

使两个系统上的一切都正确。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章