2017-09-01 63 views
1

我正在編寫一個程序,將消息發佈到rsyslog TCP套接字。我的程序應該能夠發佈任何消息。不幸的是,當我嘗試發佈某些類型的消息時 - 我收到錯誤。寫入rsyslog套接字時出錯

到目前爲止,對於以一個或多個數字開頭的消息來說,它似乎一直失敗。下面是一個可靠的生產我的本地工作站上這些錯誤Python程序:

import socket 
s = socket.socket() 
s.connect(('localhost', 514)) 
s.sendall(b'1\n') 

下面是這個程序會導致出現在/var/log/messages,而不是消息「1」:

Sep 1 16:08:52 dunpeal rsyslogd: Framing Error in received TCP message: delimiter is not SP but has ASCII value 10. 

Sep 1 16:08:52 dunpeal rsyslogd: Incomplete frame at end of stream in session 0x7fe6e801cc80 - ignoring extra data (a message may be lost). 

這是怎麼回事在這裏?

+1

看起來你並沒有努力發送一個有效的[syslog](https://tools.ietf.org/html/rfc3164)消息。 –

+0

@JamesKPolk,謝謝,我不知道我應該遵循一個完整的協議。有沒有一個很好的Python庫可以將我的有效載荷打包成格式良好的系統日誌消息? –

+0

我不知道,圖書館的建議是無關緊要的。自己動手吧,這可能很有趣。 –

回答

1

不是將原始套接字消息發送到syslog服務,而是嘗試使用記錄器,並將syslog handler添加到記錄器。這不僅更容易設置,而且還允許您在擴展或修改應用程序時將日誌輸出發送給其他處理程序。

+0

謝謝,我試過了,不幸的是,這種方法存在一些奇怪的緩衝行爲,導致我無法使用它。 –

+0

你能詳細說說@DunPeal嗎?將盡力幫助。 – MrName