Seitenhistorie
...
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):
4a) POSTGRESQL:
Codeblock |
---|
CREATE TABLE <SCHEMA>.LOGS( DATED TIMESTAMP NOT NULL PRIMARY KEY, LOGGER VARCHAR(127) NOT NULL, LEVEL VARCHAR(15) NOT NULL, MESSAGE VARCHAR(10485760) NOT NULL, THREAD VARCHAR(4000) NOT NULL, TIME INTEGER, PARAMS VARCHAR(4000) ); |
4b) ORACLE:
Codeblock |
---|
CREATE TABLE <SCHEMA>.LOGS( "DATED" TIMESTAMP NOT NULL PRIMARY KEY, "LOGGER" VARCHAR(127) NOT NULL, "LEVEL" VARCHAR(15) NOT NULL, "MESSAGE" CLOB NOT NULL, "THREAD" VARCHAR(4000) NOT NULL, "TIME" NUMBER(11), "PARAMS" VARCHAR(4000) ); |
...
Dazu sind folgende Parameter in die o.g. log4j.propierties hinzuzufügen und entsprechend anzupassen.
4c) POSTGRESQL:
Codeblock |
---|
#SQL logging
log4j.logger.SQLLogger=DEBUG, DB
log4j.logger.SQLTimer=DEBUG, DB
#JDBCAppender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DB.driver=org.postgresql.Driver
log4j.appender.DB.URL=jdbc\:postgresql\://datenbankip\:5432/postgres
log4j.appender.DB.user=nuclos
log4j.appender.DB.password=nuclos
log4j.appender.DB.sql=INSERT INTO <SCHEMA>.LOGS VALUES('%d{yyyy-MM-dd HH:mm:ss.SSS}','%c','%p','%m','%t')
log4j.appender.DB.layout=org.apache.log4j.PatternLayout |
4d) ORACLE:
Codeblock |
---|
#SQL logging log4j.logger.SQLLogger=DEBUG, DB log4j.logger.SQLTimer=DEBUG, DB #JDBCAppender log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DB.driver=oracle.jdbc.OracleDriver log4j.appender.DB.URL=jdbc:oracle:thin:nuclos/nuclos@//datenbankip:1521/oracle log4j.appender.DB.user=nuclos log4j.appender.DB.password=nuclos log4j.appender.DB.sql=INSERT INTO <SCHEMA>.LOGS VALUES (to_timestamp('%d{yyyy-MM-dd HH:mm:ss.SSS}','YYYY-MM-DD HH24:MI:SS.FF3'),'%c','%p','%m','%t',0,'') log4j.appender.DB.layout=org.apache.log4j.PatternLayout |
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.
...