2015-05-08 74 views
4

上從Python登錄到系統日誌我在這裏跟隨了幾個答案,因此無濟於事。我如何使用SysLogHandler或Syslog在Mac OS X *和* Debian(7)

我在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似乎使用該設施的權利,也許不會是(?)。消息被拾起的syslog,但他們要去一個包羅萬象的,這使我相信他們沒有得到標記LOG_LOCAL1

回答

8

原來,facilitySysLogHandler預計是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') 

解決了一切問題在兩個系統上。

+1

如果是這樣的話,它似乎已經固定在Python代碼: '高清encodePriority(個體經營,設施,優先級): 如果isinstance(設施,即basestring): 設施= self.facility_names [工具] ' – Chris