SyslogServer未接收UDP消息

时间:2016-09-07 07:24:56

标签: java syslog4j

我目前正在使用Syslog4j 0.9.46来处理syslog 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);

显然这还不够,或者我做错了什么。要发送在jar上执行的syslog messages命令:

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文档中检查了以下术语:SyslogServerIFAbstractSyslogServerUDPNetSyslogServer。它们中的每一个都只包含返回值,参数以及方法抛出的内容而没有单个描述。我还在http://www.syslog4j.org/搜索了常见问题解答和提供的示例,但没有一个是关于服务器的。

所以我的问题是。如何在不调用SyslogServer的主方法的情况下运行UDP syslog服务器?我没有使用任何自定义处理程序。

1 个答案:

答案 0 :(得分:1)

经过大量的调试,咖啡和我的橡皮鸭的长期争论终于找到了解决方案。获取服务器实例时,Syslog4j不提供默认事件处理程序。对于将被迫与同样问题斗争的后代:

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

添加此事件处理程序将在标准输出上打印传入消息。