Zum Ende der Metadaten springen
Zum Anfang der Metadaten

SQL Logging

Ab 4.19.0 und 4.18.2: Im Webclient kann der Super-User das Logging während des Betriebs an- und ausschalten, rechts unter dem Zahnrad-Dropdown Menüpunkt "Server Info". Log level für den gewünschten Logger auf "DEBUG" setzen:

Standard SQL Logging

Um alle SQL Statements zu loggen: Für log4j2 sieht die Konfiguration der log4j2.xml aus wie folgt:

log4j2 - Ausgabe des SQL-Logging im Server-Log

Um alle SQL Statements in alten Log4J-Konfiguration zu loggen, müssen folgende Zeilen in der log4j.properties hinzugefügt werden:

log4j


Das SQL-Logging lässt sich auch in einem eigenen Log-File ausgeben. Dafür müsste dann ein eigener Appender definiert, und im SQL-Logger referenziert werden:

log4j2 - Ausgabe des SQL-Logging in einem eigenen Log-File

Die Datei log4j.propierties ist im "conf" Verzeichnis des Servers zu finden, zusammen mit den Dateien jdbc.properties und server.properties. Dabei werden mit folgenden Einstellungen des log4j-Loggers alle relevanten Informationen ausgegeben:

Die Ausgabe des SQL Statements vor der Ausführung erscheint dann in der Datei server.log im Verzeichnis logs und sieht z.B. folgendermaßen aus:

SQL Performance Logging

Zusätzlich kann noch die Zeit der einzelnen SQL-Statmens gemessen werden. Dazu muss der SQLTimer aktiviert werden:

Damit wird das SQL Statement nach der Ausführung zusammen mit der Dauer ausgegeben:

Hinweis: Es kann hilfreich sein, sowohl das Statement vor, als auch nach der Ausführung zu loggen. Insbesondere wenn Statements besonders lange dauern. Dafür werden einfach die beiden Zeilen kombiniert:

SQL StackTrace Logging 

Dies funktioniert ab Nuclos 3.14.9.

Es kann zusätzlich noch der StackTrace, sowohl vom Server, als auch vom Client, bis zur Ausführung des SQL-Statements geloggt werden. Das ist möglich für bestimmte SQL-Statements oder für alle SQL-Statements. Für bestimmte Statements kann in der ersten Methode der Klasse "DataSourceExecuter" ein String-Suchbegriff eingegeben werden (auch zur Laufzeit, wenn der Server im Debug-Modus gestertet wurde):

Außerdem lässt sich das StackTrace-Logging ganz allgemein für alle SQL-Statments in der log4j.propertier steuern:

Mit der Option "DEBUG" werden nur StackTrace Elemente, welche mit "org.nuclos" beginnen geloggt. Wenn alle Element ausgegeben werden sollen, dann sollte die Option "TRACE" verwenden werden:

Allgemeines zum Logging

Nuclos verwendete intern log4j Version 1.2.x für das Logging. Wenn Sie in Ihrer Installation die Datei <nuclos_home>/conf/log4j.properties anpassen, können Sie das Log Verhalten des Servers in weiten Bereichen konfigurieren. Auf diese Seite finden Sie verschiedene Beispielkonfigurationen, die

  • bestimmte Log Events in eine separate Datei schreiben,
  • bestimmte Log Events statt in einer Datei in der Datenbank loggen und
  • die Ausführlichkeit des Loggings für verschiedene Log Bereiche (z.B. Java Klassen) anpassen.

Weitergehende Informationen zu log4j finden Sie z.B. unter

Die hier vorgestellte Methode, unterschiedliche Log Dateien zu erzeugen und/oder das Logging in eine Datenbank umzuleiten, funktionieren auch in weiteren Fällen. Beispielsweise ist es möglich, das client lifecycle logging auf dem Server entsprechend zu konfigurieren. Das zu konfigurierende Log Handle ist hierbei org.nuclos.server.web.ClientLifecycle.

Separate Log Datei für Client Lifecycle Events

JDBCAppender SQL Logging

Zusätzlich (oder alternativ) lassen sich die SELECT SQL Statements direkt in eine Datenbank schreiben. Dies erledigt das Apache log4j-Framework. Dazu braucht man eine Datenbank, die nicht notwendigerweise identisch mit der Nuclos-DB sein muss. Dort muss eine Tabelle angelegt werden, z.B. für PostgreSQL (bei Oracle sollte die Spalte "MESSAGE" ein CLOB sein):

POSTGRESQL

ORACLE

Dazu sind folgende Parameter in die o.g. log4j.propierties hinzuzufügen und entsprechend anzupassen.

POSTGRESQL

ORACLE

Es ist zu empfehlen, den Log-Level möglichst hoch zu setzten (wie hier "WARN") damit die DB beim Loggin nicht überlastet wird. Durch entfernen von "stdout" oder "logfile" kann das Logging auf die DB selber beschränkt werden.

Auswertung der SQLTimer Werte aus der Datenbank

Mit "SQLTimer" werden die Angaben zur verbrauchten Zeit an die Message gehängt. Um diese einfacher auszuwerten, kann folgendes DB-Statements durchgeführt werden:

POSTGRESQL

Hinweis: Die Syntax der Statements ist PostgreSQL-Spezifisch. Für andere Datenbanken müssen die Statements angepasst werden.

Beispiel einer möglichen Auswertung:

Altes Standard SQL Logging (3.13.8 oder früher)

Um alle SQL Statements zu loggen, müssen folgende Zeilen in der log4j.properties hinzugefügt werden:

Damit die neuen Parameter wirksam werden, muss der Server neu gestartet werden. Die Datei log4j.propierties ist im "conf" Verzeichnis des Servers zu finden, zusammen mit den Dateien jdbc.properties und server.properties.

Die Ausgabe erscheint dann in der Datei server.log im Verzeichnis logs und sieht z.B. folgendermaßen aus:

Wenn die Ausführung des SQL Statements länger als 0.1 Sekunden braucht, wird anschließend noch eine Zeitangabe (in Millisekunden) ausgegeben: