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

Way*_*ner 7 python linux macos logging rsyslog

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

我正在使用Macbook(优胜美地)开发,但我们的测试/生产盒是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')
Run Code Online (Sandbox Code Playgroud)

这些消息将显示在我的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!')
Run Code Online (Sandbox Code Playgroud)

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

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

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

编辑:

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

Way*_*ner 9

结果facilitySysLogHandler期望不是 syslog.LOG_LOCAL1或该命名空间中的任何值.

它期望'local1'或文档中解释的其他字符串.

简单地改变

h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility=syslog.LOG_LOCAL1)
Run Code Online (Sandbox Code Playgroud)

h = logging.handlers.SysLogHandler(address='/var/run/syslog', facility='local1')
Run Code Online (Sandbox Code Playgroud)

在两个系统上都做对了.