Log Structure

<< Click to Display Table of Contents >>

Navigation:  PUM - Modellierung und Codeerzeugung > Strukturen und Muster >

Log Structure

Beschreibung

Das Logging-System ermöglicht der Software, Mitteilungen abzuspeichern, damit man später Informationen daraus ziehen kann oder im Fehlerfall recherchieren kann.

Der Gemstone-Entwickler kann LOG-Meldungen für den Erfolgsfall oder den Mißerfolgsfall definieren. Das Framework sendet entsprechend die Meldungen an RabbitMQ in den evLog Channel.

Client bereitet eine Log-Nachricht auf

Eine Anwendung erzeugt eine Instanz der Klasse "TSTAPIParMessage" und füllt die entsprechenden Informationen aus:

appLogCounter - ein zentraler Zähler in der Anwendung, der mit jeder Nachricht hochgezählt wird (muss ausgefüllt sein)

appName - Kurzstring der Anwendung, die die Meldung absenden will (muss ausgefüllt sein)

logData - ein String, der eine JSON-Struktur definiert und spezifische Werte der LogMeldung enthält

logLevel - numerische Darstellung des Log Levels

logLevelText - textuelle Darstellung des Log Levels

messageNumber - opt. numerischer Wert (der Client App) der Log Meldung

messageText - textueller Inhalt der Log Meldung  (der Client App)

sqlStatement - vorbereitetes SQL-Statement der Nachricht

srvLogCounter - Counter des LOG-Servers. Startet bei 0 beim Start des LogServers.

whenAppTS - TS der Anwendung, wann diese Meldung erzeugt wurde

whenLogSrv - TS des LogServers

Danach sendet die Anwendung diese Informationen mittels des API-Calls "SendAppLogMessage" an den DB Server.

DB-Server empfängt die Log-Nachricht

Der DB-Server nimmt die Daten entgegen und füllt einige Daten auf:

serverAppType - Typ des Servers, der diese Nachricht empfangen hat

serverAppName - Name des Servers, der diese Nachricht empfangen hat.

und baut die Struktur von "TSTAPIParMessage" auf und setzt dort einige Attribute:

contentType = "application/json"

correlationID = nil

exchange = direct

deliveryMode = persistent

name = "evLog"

replyTo = nil

routingKey = "chLog"

vHost = "?"

payload = toJosonString(TSTAPIParMessage)

payloadType = "TSTAPIParMessage"

sendet den Event direkt nach RabbitMQ. RabbitMQ dient damit als Puffer für die Speicherung in die Datenbank.

Log-Feeder Prozeß

Ein externer Prozess nimmt die Events von RabbitMQ entgegen und füllt den folgenden Wert aus:

srvLogCounter

und bereitet die SQL-Statements auf und schreibt diese Daten in die Datenbank.