2017-09-01 57 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