2016-10-14 61 views
3

我試圖理解爲什麼從Python的日誌框架的SyslogHandler類(logging.handlers)沒有實現任何由RFC 6587中描述的框架機制:Python的SyslogHandler和TCP

  1. 字節計數 :它將消息長度「預加」到系統日誌幀:

  2. 非透明成幀:用於分隔消息的尾部字符。這是大多數服務器所能理解的。

這個「問題」可以通過添加一個LF字符的消息的結尾很容易解決,但我希望的是,SyslogHandler會照顧這個默認:

sHandler = logging.handlers.SysLogHandler(address=(address[0], address[1]), socktype = socket.SOCK_STREAM) 
sHandler.setFormatter(logging.Formatter(fmt=MSG_SYSLOG_FORMAT, datefmt=DATE_FMT)) 
self.addHandler(sHandler) 

這對於Fluentd和rsyslog都不起作用。正如我所說,我已經暫時添加到handlers.py(僅用於測試)855行:

msg = prio + msg + '\n' 

現在正在工作。


我的問題:

  1. 應該Python的SyslogHandler類提供設置開/關的八位字節計數或拖車字符的可能性。目前它什麼都不做......
  2. 程序員的工作是瞭解服務器如何工作並覆蓋處理程序來解決消息成幀問題?

現在,我現在要做的是重寫emit()方法,子類化SyslogHandler。

+0

隨着rsyslog的八位字節計數也有效。參見: msg = str(len(msg))+''+ msg – cabreracanal

回答

1

logging之前的系統日誌支持早於RFC,並且在此之前,RFC在標準方面幾乎沒有。

準確地說:所述SysLogHandler處理程序是的loggingfirst added to the Python standard library in 2002部分和基本上保持由於相同(TCP支持是added in 2009,和RFC5424支持在2011年得到了改善);原始代碼基於this syslog module from 1997

other bug reports很明顯的維護者要保持在代碼中最廣泛的向後兼容性在這裏,所以如果你需要從一個較新的RFC特定的功能,你有兩個選擇:

  • 擴展類和實施功能
  • 提交功能請求和/或修補程序以改進logging模塊中的功能;考慮到向後兼容性的要求。