Java から syslog を実行したい。log4j アペンダーがありますが、機能していないようです (とにかく私にとっては ... Google の結果では、この問題がまだ解決されていない他の多くの人が表示されます)。
アペンダーをデバッグしようとしているので、RFC3164 に基づいて次のスクリプトを作成しました。
実行されますが、syslog にログが表示されません。
// scala
import java.io._
import java.net._
val ds = new DatagramSocket()
val fullMsg = "<11>May 26 14:47:22 Hello World"
val packet = new DatagramPacket(fullMsg.getBytes("UTF-8"), fullMsg.length,
InetAddress.getLocalHost, 514)
ds send packet
ds.close
/bin/nc も使用してみましたが、どちらも機能しません。
echo "<14>May 26 15:23:33 Hello world" > nc -u localhost 514
ただし、 Ubuntu コマンド /usr/bin/loggerは機能します。
logger -p user.info hello world
# logs: May 26 15:25:10 dsupport2 jem: hello world
私は何が間違っているのでしょうか?
編集
nc と scala の両方が次のパケットを生成します。
jem@dsupport2:~/projects/log4j$ grep -A 10 514 out
xxx.xxx.xxx.xxx:37920(unknown) -> xxx.xxx.xxx.xxx:514(syslog)
Version: 4 Total Lenght: 63 TTL: 64
Packet Number: 4
---[ UDP Data ]------------------------------------------------------
<14>May 26 15:26:33 Hello world 22
/usr/bin/logger (機能するもの) をリモートで通信できないようです。ローカルのsyslogdをリレーとして設定することになっていると思います。
編集
nc を使用すると、wireshark は、フォーマットは OK ですが、ポートに到達できないというメッセージを表示します。