2016-09-07 6 views
0

Ich verwende derzeit Syslog4j 0.9.46 für die Behandlung von Syslog UDP-Nachrichten. Ich benutze es, um sie von der Kommandozeile aus zu senden, und jetzt muss ich sie irgendwie empfangen. Dazu benutze ich folgenden Code:SyslogServer empfängt keine UDP-Nachrichten

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

Offenbar ist das nicht genug oder ich mache etwas falsch. Um auf das Glas durchgeführt Syslog-Meldungen Befehl zu senden:

java -jar syslog4j-0.9.46.jar -h 127.0.0.1 -p 514 udp 

Ich weiß, sie werden richtig gesendet, weil Sie den folgenden Code ermöglicht es mir, sie zu empfangen:

SyslogServer.main(new String[]{"-h", "127.0.0.1", "-p", "514", "udp"}); 

ich die folgenden Begriffe in der geprüft Syslog4j 0.9.46 Dokumentation: SyslogServerIF, AbstractSyslogServer und UDPNetSyslogServer. Jede einzelne von ihnen enthielt nur den Rückgabewert, Parameter und was die Methode ohne ein einziges Wort der Beschreibung wirft. Ich habe auch die FAQ und die mitgelieferten Beispiele unter http://www.syslog4j.org/ durchsucht, aber keine davon ging um den Server.

Also meine Frage ist. Wie kann ich den UDP-Syslog-Server ausführen, ohne die Hauptmethode von SyslogServer aufrufen zu müssen? Ich verwende keine benutzerdefinierten Handler.

Antwort

1

Nach viel Debugging, Kaffee und einer langen Debatte mit meiner Gummiente habe ich endlich die Lösung gefunden. Syslog4j bietet keinen Standard-Ereignishandler beim Abrufen einer Instanz eines Servers. Für zukünftige Generationen, die mit dem gleichen Problem zu kämpfen gezwungen werden:

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

Hinzufügen dieser Event-Handler die eingehenden Nachrichten auf der Standardausgabe gedruckt.