2016-09-07 19 views
0

現在、syslog UDPメッセージを処理するためにSyslog4j 0.9.46を使用しています。私はコマンドラインからそれらを送信するためにそれを使用し、今私は何とかそれらを受け取る必要があります。これを行うには、次のコードを使用しています:SyslogServerがUDPメッセージを受信して​​いません

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); 

明らかにこれでは不十分です。間違ったことをしています。 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ドキュメント:SyslogServerIF,AbstractSyslogServerおよびUDPNetSyslogServer。それらのすべての1つに戻り値、パラメータ、およびメソッドが単一の記述の単語なしでスローするものだけが含まれていました。私はFAQと提供された例をhttp://www.syslog4j.org/で検索しましたが、どれもサーバーについてはありませんでした。

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

答えて

1

多くのデバッグ、コーヒー、そして私のラバーダックとの長い議論の末、私は最後に解決策を見つけました。 Syslog4jは、サーバーのインスタンスを取得するときに、デフォルトのイベントハンドラを提供しません。

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

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

関連する問題