0

現在、syslog UDP メッセージの処理に Syslog4j 0.9.46 を使用しています。コマンドラインから送信するために使用していますが、どうにかして受信する必要があります。これを行うには、次のコードを使用しています。

SyslogServerIF server = SyslogServer.getInstance("udp");
server.getConfig().setHost("127.0.0.1");
server.getConfig().setPort(514);
server.initialize("udp", server.getConfig());
server.run();
Thread.sleep(60*1000);

どうやらこれでは十分ではないか、何か間違ったことをしています。jar で実行される syslog メッセージ コマンドを送信するには:

java -jar syslog4j-0.9.46.jar -h 127.0.0.1 -p 514 udp

次のコードを実行すると受信できるため、正しく送信されていることがわかります。

SyslogServer.main(new String[]{"-h", "127.0.0.1", "-p", "514", "udp"});

Syslog4j 0.9.46 ドキュメントで次の用語を確認しました: SyslogServerIFAbstractSyslogServerおよびUDPNetSyslogServer. それらのすべてには、戻り値、パラメーター、およびメソッドがスローするものだけが含まれており、説明は一言もありませんでした。http://www.syslog4j.org/でFAQ と提供されている例も検索しましたが、サーバーに関するものはありませんでした。

だから私の質問はです。からメイン メソッドを呼び出さずに UDP syslog サーバーを実行するにはどうすればよいSyslogServerですか? カスタム ハンドラは使用しません。

4

1 に答える 1

1

多くのデバッグ、コーヒー、ラバーダックとの長い議論の後、最終的に解決策を見つけました。Syslog4j は、サーバーのインスタンスを取得するときにデフォルトのイベント ハンドラーを提供しません。同じ問題に苦しむことを余儀なくされる将来の世代のために:

SyslogServerIf server = SyslogServer.getInstance("udp");
SyslogServerConfigIf config = server.getConfig();
config.addEventHandler(new PrintStreamSyslogServerEventHandler(System.out));
syslogServer.run();

このイベント ハンドラーを追加すると、着信メッセージが標準出力に出力されます。

于 2016-09-07T10:34:25.907 に答える