syslog4j (2011 年からの現在のバージョン) を使用して、syslog メッセージを受信します。明らかに、それらのいくつかは処理されず、wireshark を使用して、元のサーバーを離れ、syslog4j プログラムを実行するサーバーに到着することがわかります。
残念ながら、これは送信者がサポートする唯一の構成であるため、udp での syslog の使用に制限されています。しかし、wireshark のパケットを見ると、これが問題の原因ではないようです。
私のプログラムは次のようになります。
SyslogServerIF syslogServer = SyslogServer.getInstance("udp");
SyslogServerConfigIF syslogServerConfig = syslogServer.getConfig();
syslogServerConfig.addEventHandler( new MyEventHandler());
SyslogServer.getThreadedInstance("udp");
while (true) {
SyslogUtility.sleep(1000);
}
私の(省略された)バージョンの Handler は次のように書かれています。
public class MyEventHandler implements SyslogServerSessionEventHandlerIF {
public void event(Object session, SyslogServerIF syslogServer,
SocketAddress socketAddress, SyslogServerEventIF event) {
System.out.println("event.msg : " + event.getMessage());
System.out.println("event.date: " + event.getDate());
}
}
アプリケーションに高い負荷はありませんが (5 分間で約 100 件のメッセージ)、メッセージの 10 ~ 20% が失われます。