2012-12-27 33 views
20

我期待在如何記錄從我的Python應用程序中的系統日誌,我發現有這樣做的方法有兩種:syslog.syslog VS SysLogHandler

  1. 使用syslog.syslog()程序
  2. 使用記錄儀模塊SysLogHandler

這是最好的選擇使用,每個人的優點/缺點等,因爲我真的不知道我應該使用哪一個。

+1

請考慮這篇博文......我認爲它提供了許多有價值的見解和POV。 http://www.aminus.org/blogs/index.php/2008/07/03/writing-high-efficiency-large-python-sys-1?blog=2 – 2014-04-03 17:35:16

+0

@大衛,這是一個非常古老的職位;它仍然是相關的? – Tshepang

回答

10

syslog.syslog()只能用於發送消息到本地syslogd。 SysLogHandler可用作全面的可配置日誌子系統的一部分,並可登錄到遠程機器。

+4

好吧,這並非完全正確,您可以配置您的系統日誌以將收到的內容發送到遠程系統日誌服務器。這樣做的好處是,不僅將python應用程序的消息發送到遠程服務器,而且還發送系統的每條消息。 – Juancho

+1

但是這種配置是獨立於Python程序完成的。我的答案仍然存在。 –

+2

Yees,但我的意思是,通過syslog.syslog(),你也可以通過本地系統日誌服務器發送消息到遠程系統日誌服務器,所以它不是syslogHandler比syslog.syslog更好的一個優勢() – Juancho

5

日誌記錄模塊是一個更全面的解決方案,可以處理所有的日誌消息,而且非常靈活。例如,您可以爲您的記錄器設置多個handers,並且每個可以設置爲以不同的級別登錄。您可以使用SysLogHandler將錯誤發送到系統日誌,使用FileHandler來調試日誌,以及使用SMTPHandler將真正關鍵的消息發送給操作員。您還可以在模塊內定義記錄器的層次結構,而且每一個都有自己的水平,所以您可以啓用/禁用從特定的模塊信息,如:

import logging 
logger = logging.getLogger('package.stable_module') 
logger.setLevel(logging.WARNING) 

而在另一個模塊:

import logging 
logger = logging.getLogger('package.buggy_module') 
logger.setLevel(logging.DEBUG) 

這兩個模塊中的日誌消息將根據級別發送到'包'記錄器,並最終發送到您定義的處理程序。您還可以將處理程序直接添加到模塊記錄器,等等。如果你已經沿着這條路走了,並且仍然感興趣,那麼我建議跳轉到日誌記錄tutorial以獲取更多詳細信息。

0

到目前爲止,logging.handlers.SysLogHander還有一個缺點,那就是沒有提到。那是我不能設置選項如LOG_ODELAYLOG_NOWAITLOG_PID。另一方面,LOG_CONSLOG_PERROR可以通過添加更多處理程序來實現,並且LOG_NDELAY默認情況下已設置,因爲連接在處理程序實例化時打開。

相關問題