2016-09-07 104 views
0

我目前使用Syslog4j 0.9.46來處理系統日誌UDP消息。我用它從命令行發送它們,現在我必須以某種方式接收它們。要做到這一點,我使用下面的代碼: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,AbstractSyslogServerUDPNetSyslogServer。它們中的每一個都只包含返回值,參數和方法拋出的內容,而沒有任何一個單詞的描述。我還在http://www.syslog4j.org/上搜索了常見問題解答和提供的示例,但沒有一個是關於服務器的。

所以我的問題是。如何在不需要調用SyslogServer的主要方法的情況下運行UDP系統日誌服務器?我不使用任何自定義處理程序。

回答

1

經過大量調試,咖啡和我的橡皮鴨長時間辯論終於找到了解決方案。在獲取服務器實例時,Syslog4j不提供默認的事件處理程序。對於後代將被迫同樣的問題:

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

添加此事件處理程序將打印標準輸出上的傳入消息。