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
结果facility是SysLogHandler期望不是 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)
在两个系统上都做对了.
| 归档时间: |
|
| 查看次数: |
3068 次 |
| 最近记录: |