SyslogServer не получает UDP-сообщения

В настоящее время я использую 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:

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, Каждый из них содержал только возвращаемое значение, параметры и то, что метод выдает без единого слова описания. Я также искал FAQ и предоставленные примеры на http://www.syslog4j.org/, но ни один из них не касался сервера.

Итак, мой вопрос. Как я могу запустить сервер системного журнала UDP, не вызывая метод main из SyslogServer? Я не использую никаких пользовательских обработчиков.

1 ответ

Решение

После долгих отладок, кофе и долгих споров с моей резиновой уткой я наконец нашел решение. Syslog4j не предоставляет обработчик событий по умолчанию при получении экземпляра сервера. Для будущих поколений, которые будут вынуждены бороться с той же проблемой:

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

При добавлении этого обработчика события входящие сообщения будут напечатаны на стандартном выводе.

Другие вопросы по тегам