我試圖理解爲什麼從Python的日誌框架的SyslogHandler類(logging.handlers)沒有實現任何由RFC 6587中描述的框架機制:Python的SyslogHandler和TCP
字節計數 :它將消息長度「預加」到系統日誌幀:
非透明成幀:用於分隔消息的尾部字符。這是大多數服務器所能理解的。
這個「問題」可以通過添加一個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'
現在正在工作。
我的問題:
- 應該Python的SyslogHandler類提供設置開/關的八位字節計數或拖車字符的可能性。目前它什麼都不做......
- 程序員的工作是瞭解服務器如何工作並覆蓋處理程序來解決消息成幀問題?
現在,我現在要做的是重寫emit()方法,子類化SyslogHandler。
隨着rsyslog的八位字節計數也有效。參見: msg = str(len(msg))+''+ msg – cabreracanal