如何在 Mac OS X *和* Debian (7) 上使用 SysLogHandler 或 syslog 从 Python 登录到 syslog
Posted
技术标签:
【中文标题】如何在 Mac OS X *和* Debian (7) 上使用 SysLogHandler 或 syslog 从 Python 登录到 syslog【英文标题】:How can I log from Python to syslog with either SysLogHandler or syslog on Mac OS X *and* Debian (7) 【发布时间】:2015-07-19 11:06:49 【问题描述】:我在这里关注了几个答案,但无济于事。
我在 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 系统日志中。但是,当我在 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 似乎可能没有正确使用该工具(?)。消息正在被 syslog 接收,但它们会被捕获,这让我相信它们不会被标记为 LOG_LOCAL1
【问题讨论】:
【参考方案1】:原来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')
在两个系统上都做对了。
【讨论】:
如果是这样的话,似乎已经在python的代码中修复了:def encodePriority(self, facility, priority): if isinstance(facility, basestring): facility = self.facility_names[facility]
这似乎是准确的。我敢肯定已经有一段时间了,因为这实际上是一个问题......至少我希望:D以上是关于如何在 Mac OS X *和* Debian (7) 上使用 SysLogHandler 或 syslog 从 Python 登录到 syslog的主要内容,如果未能解决你的问题,请参考以下文章