如何使用 SysLogHandler 或 Mac OS X *and* Debian 上的系统日志从 Python 登录到系统日志 (7)

How can I log from Python to syslog with either SysLogHandler or syslog on Mac OS X *and* Debian (7)

我在 SO 上遵循了几个答案都无济于事。

我正在开发一本 Mac 书 (Yosemite),但我们的 test/production 盒子是 Debian 7(使用 rsyslog)。我正在尝试以一种既可以在本地工作又可以在本地工作的方式注销到系统日志。

我尝试了使用 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 系统日志中。但是,当我在 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。

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

那么我如何让系统日志同时适用于 Mac Debian?

编辑:

作为进一步的信息 - 我发现我的 SysLogHandler 似乎可能没有正确使用设施(?)。消息 被 syslog 拾取,但它们将被包罗万象,这让我相信它们没有被标记为 LOG_LOCAL1

原来 SysLogHandler 期望的 facility 而不是 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')

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