1

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 ですが、ポートに到達できないというメッセージを表示します。

4

3 に答える 3

1

Ubuntu のネットワーク ファイアウォールは、特定のポートへのトラフィックを許可するように明示的に指示する必要があります。これには Syslog が含まれます。

于 2010-05-26T06:21:55.567 に答える
1

syslogd は、おそらく IP ソケットではなく、UNIX ドメイン ソケットをリッスンしています。標準ソケットは/dev/log. このソケットに接続するには、 JUDSなどのライブラリを使用する必要があります。これにより、ログ レコードを書き込むことができる OutputStream が得られます。

于 2010-05-29T20:20:32.933 に答える
1

ログメッセージが実際に送信されているかどうか、整形式に見えるかどうかなどを確認するために、ローカルネットワークトラフィックをスニッフィングしようとしましたか? nastなどを使用できます。

于 2010-05-26T06:18:10.823 に答える