Versionen im Vergleich

Schlüssel

  • Diese Zeile wurde hinzugefügt.
  • Diese Zeile wurde entfernt.
  • Formatierung wurde geändert.

...

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.

...