我使用syslog4j(2011年的当前版本)来接收系统日志消息。显然其中一些没有被处理,我可以看到他们使用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的My(缩写)版本是这样编写的:
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%的消息丢失