Seitenhistorie
...
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:
SQL Timer per REST einschalten:
Codeblock |
---|
curl --cookie-jar cookies.txt http://localhost:8080/nuclos-war/rest -X POST -H "Content-Type: application/json" -d '{"username":"'nuclos'", "password":"''"}';
curl --cookie cookies.txt http://localhost:8080/nuclos-war/rest/maintenance/logging/SQLTimer/level -X PUT -H "Content-Type: application/json" -d '{"level":"'debug'"}'; |
bzw. reines SQL Logging vor der Ausführung ohne Timer mit "SQLLogger" statt "SQLTimer" bzw. mit "SQLUpdate" für das ausschließliche Loggen von "UDPATE/INSERT/DELETE"-Statements. Zum Abschalten des Logging den Level wieder von "debug" auf "info" setzen.
Standard SQL Logging
Um alle SQL Statements zu loggen: Für log4j2 So sieht die Konfiguration der log4j2.xml aus wie folgt, wenn einfache SQLLogging (vor dem Ausführen des SQL Statements) eingeschalten werden soll:
Codeblock | ||
---|---|---|
| ||
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d %p [%c] - %m%n"/> </Console> <RollingFile name="Logfile" fileName="<Nuclos-Log-Verzeichnis>/server.log" filePattern="<Nuclos-Log-Verzeichnis>/server-%i.log" append="true"> <PatternLayout pattern="%d %p [%c] - %m%n"/> <Policies> <SizeBasedTriggeringPolicy size="5 MB"/> </Policies> <DefaultRolloverStrategy max="20"/> </RollingFile> </Appenders> <Loggers> <Logger name="org.apache.log4j.xml" level="info"/> <Logger name="SQLLogger" level="debug"/> <Root level="info"> <AppenderRef ref="Console"/> <AppenderRef ref="Logfile"/> </Root> </Loggers> </Configuration> |
Die Datei log4j2.xml ist im "conf" Verzeichnis des Servers zu finden, zusammen mit den Dateien jdbc.properties und server.properties. Alternativ (oder additional) kann noch "SQLTiming" angeschalten werden:
Codeblock |
---|
<Logger name="org.apache.log4j.xml" level="info"/> <Logger name="SQLTimer" level="debug"/> |
Damit wird das SQL nach der Ausführung des Statements auf der Datenbank geloggt und die Ausführungszeit in Millisekunden mit angeben. Hier ist eine typische Ausgabe des SQLTimers:
Codeblock |
---|
2018-01-04 18:10:54,844 DEBUG [SQLTimer] - SELECT COUNT (t.INTID) FROM D2SC_FH_LASTPOSITION t WHERE 1=1
=[]=(2 ms) |
SQL StackTrace Logging
...
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 Dafür kann der Textfilter unter "Server Info" im Webclient verwendet werden (siehe oben): Außerdem kann in der Klasse "DataSourceExecuter" ein String-Suchbegriff eingegeben angegeben werden (auch zur Laufzeit, wenn der Server im Debug-Modus gestartet wurde):, entweder über einen Debugger durch setzen des Strings in folgender Methode
Codeblock |
---|
public static String getDebugSQL() { return "SELECT COUNT"; } |
oder durch setzen aus dem Programm mit der statischen Variable Methoden DataSourceExeceuter.setDebugSQL(String debugSQL:)
Codeblock |
---|
DataSourceExeceuter.setDebugSQL("SELECT COUNT"); |
Dann werden für alle SQL Staments Statements die "SELECT COUNT" beinhaltet zwei erweiterte Stacktraces ausgegeben:
...
Hinweis: Der Client Stack Trace ist nur erhältliserhältlich, wenn der Server im Entwicklungsmodus (-Dfunctionblock.dev=true) gestartet worden ist.
...
Hier steht, wie man SQL Logging in separates Log-File konfiguriert.
SQL Logging für alte Nuclos-Versionen (bis 4.5)
Hier sind die Logging-Einstellung für Nuclos bis 4.5 zu finden: Altes SQL Logging (Bis Nuclos 4.5)