2017-09-01 10 views
1

私はrsyslog TCPソケットにメッセージを発行するプログラムを書いています。私のプログラムはどんなメッセージも公開できるはずです。残念ながら、特定のタイプのメッセージを公開しようとするとエラーが発生します。rsyslogソケットに書き込むときのエラー

これまでのところ、1桁以上の数字で始まるメッセージでは一貫して失敗しているようです。ここでは確実に私のローカルワークステーション上で、これらのエラーを生成しますPythonプログラムです:ここでは

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

は、このプログラムではなく、メッセージ「1」、/var/log/messagesに表示されるように引き起こすものである:

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、ありがとう、私は、私が従うべきプロトコル全体があることを知らなかった。ペイロードを適切な形式のsyslogメッセージにパッケージ化できるPythonライブラリがありますか? –

+0

私は知らないし、ライブラリの推奨事項は話題外である。自分でやってみると楽しいかもしれません。 –

答えて

1

生のソケットメッセージをsyslogサービスに送信する代わりに、代わりにロガーを使用して、syslog handlerをロガーに追加してみてください。これは設定が簡単であるだけでなく、アプリケーションの拡張または変更時にログ出力を他のハンドラに送信することもできます。

+0

ありがとう、私はそれを試みた、残念ながら、私はそれを使用することを防ぐこのメソッドでいくつかの奇妙なバッファリングの動作があります。 –

+0

あなたはもっと@DunPealを詳しく説明できますか?助けてくれるだろう。 – MrName

関連する問題