我在这里听了几个答案,但没有用。
我正在开发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
标记
答案 0 :(得分:9)
结果显示facility
期望不 SysLogHandler
的{{1}}或该命名空间中的任何值。
它需要'local1'
或其他字符串,如文档中所述。
简单地改变
syslog.LOG_LOCAL1
到
h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility=syslog.LOG_LOCAL1)
在两个系统上都做对了。