2017-08-31 2 views
0

Ich habe eine Spring Boot App, die als Event Logger verwendet wird. Jeder Client sendet verschiedene Ereignisse über eine REST-API, die dann in einer Datenbank gespeichert werden. Aber abgesehen von einfachen Ereignissen müssen die Clients ihre Ausführungsprotokolle auch an Spring Boot senden.Gibt es eine Möglichkeit, ein Protokoll zu einer Spring Boot-Anwendung zu streamen?

Nun ist es einfach, ein Protokoll hochzuladen, nachdem ein Client fertig ist, und es gibt viele Beispiele dafür. Was ich brauche, ist das Streamen des Protokolls, während der Client ausgeführt wird, Zeile für Zeile, und nicht warten, bis der Client fertig ist.

Ich habe viel Zeit damit verbracht, nach einer möglichen Antwort zu suchen, und ich konnte nichts finden, was meinen Bedürfnissen entspricht. Irgendein Ratschlag, wie man das mit Spring Boot macht (zukünftige Versionen enthalten)? Ist es machbar?

+0

Können Sie sich darüber im Klaren sein, um welche Art von Kunden es sich handelt? Angenommen, Sie schreiben die Clients und steuern deren Verhalten, und sie sind auch in Java geschrieben, können Sie Ihren eigenen Appender für jedes verwendete Protokollframework erstellen und Appender könnte Ihre REST-API für jede Protokollierungsanweisung anstelle von Schreiben in eine Datei. Ich würde empfehlen, die tatsächlichen REST-Aufrufe asynchron auszuführen, indem ein anderer Thread in der Appender-Implementierung erzeugt wird. – John

+0

@John die Clients sind Java SE, und ja, ich schreibe den Code für sie. [Andrew] (https://Stackoverflow.com/users/1898535/andrew-kaluzniacki) hat bereits etwas Ähnliches vorgeschlagen, so dass Appender das Erste sein werden, was ich versuchen werde. Danke für die Antwort! –

Antwort

0

Ich sehe hier ein paar Möglichkeiten. Ziehen Sie zunächst in Ihrem Client die Verwendung eines Logbacks (der standardmäßigen Spring Boot-Protokollimplementierung) SocketAppender oder ServerSocketAppender in Betracht. Siehe: https://logback.qos.ch/manual/appenders.htm. Auf diese Weise können Sie Protokollnachrichten an einen Protokolldienst senden. Aber ich könnte vorschlagen, dass Sie sich nicht bei Ihrer Spring Boot Event App anmelden, da ich befürchte, dass das unnötigerweise die Komplexität Ihrer App erhöht, und ich sehe eine Situation, in der es einen Fehler in der Event App gibt von Fehlern, die wiederum alle auf die Ereignis-App zurückgehen, was es schwierig macht, den anfänglichen Fehler zu bestimmen.

Was würde ich respektvoll vorschlagen, dass Sie stattdessen auf einen Logging-Server anmelden - logstash: https://www.elastic.co/products/logstash zum Beispiel, oder wenn Sie bereits eine db, dass Sie das Ereignis speichern, dann vielleicht das Logbuch DBAppender verwenden und die Protokolle schreiben direkt zu einer db.

+0

Ich dachte schon an logstash (und den ganzen Elkstack), ich wusste einfach nicht, wie es zu meiner Sicherheitseinrichtung passen würde. Und ich wollte dem Projekt keine zusätzliche Komplexität hinzufügen. Die Appender auf der anderen Seite, scheinen wie eine sehr direkte Lösung, also werde ich das zuerst versuchen. Danke für die Antwort! –

+0

Sie könnten in der Lage, eine logback http appender zu finden, wenn Sie aussehen: https://github.com/kewang/logback-http-appender https://stackoverflow.com/questions/38271359/logback-appender- to-post-message-as-http-nachricht –

+0

Am Ende entschied ich mich für Logstash. Ich habe einen Log-Controller in meiner Spring Boot-App hinzugefügt, der die Anfragen von den http-Log-Appendern meines Clients akzeptiert. Alle Inhalte, die der Controller von den Clients erhält, werden nur in einer separaten Protokolldatei protokolliert. Ich habe dann Logstash einfach an diese Logdatei angehängt. Ich weiß nicht, ob es das ideale Setup ist, aber es erlaubte mir zumindest, meine vorhandene Spring Boot-Sicherheit zu verwenden. –

Verwandte Themen