如何在Mac OS X *和* Debian(7)

时间:2015-05-08 13:44:24

标签: python linux macos logging rsyslog

我在这里听了几个答案,但没有用。

我正在开发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中。但是,当我在Debian 7上更改address='/dev/log'时......没有骰子。

然而:

import syslog

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

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

我真的很想能够获得一个适用于这两个平台的日志记录解决方案。显然地址会有所不同,但我已经在配置中设置了它。

那么如何让syslog同时适用于Mac Debian?

修改

作为进一步的信息 - 我发现我的SysLogHandler似乎可能没有正确使用设施(?)。系统日志正在接收消息 ,但是他们会全力以赴,这让我相信他们没有被LOG_LOCAL1标记

1 个答案:

答案 0 :(得分:9)

结果显示facility期望 SysLogHandler的{​​{1}}或该命名空间中的任何值。

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

简单地改变

syslog.LOG_LOCAL1

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

在两个系统上都做对了。