JDBC-Appender

lotharr

Grünschnabel
Hi,
ich möchte in eine Oracle-Tabelle mit Log4J meine Aktionen protokollieren.
In der Properti steht
log4j.appender.jdbc.sql=insert into logTable (message, class, priority, log_date)
values ('%m', '%c', '%p', '%d').
Wie bekomme die Sätze in die DB?
Mit LOGGER.info bekomme ich nur ein Objekt ( z.B."START") rein, aber eben nicht:
if( LOGGER.isInfoEnabled() )
LOGGER.info("Start", "I","1",sysdate );

Wer kann helfen?
Danke Lotharr
 
Hallo!

Da der JDBCAppender aus dem Log4j Projekt nicht mehr gepflegt/ Weiterentwicklet wird solltest du besser einen anderen verwenden:
http://www.dankomannhaupt.de/projects/index.html

Java:
/**
 * 
 */
package de.tutorials;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

/**
 * @author Tom
 *
 */
public class Log4jJDBCAppenderExample {

    
    static Logger logger = Logger.getLogger(Log4jJDBCAppenderExample.class);
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        if(logger.isInfoEnabled()){
            logger.log(Level.INFO, "ABC");
        }
    }

}

log4j.properties:
Code:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, MYSQL_JDBC_APPENDER

# A1 is set to be a ConsoleAppender.
log4j.appender.MYSQL_JDBC_APPENDER=org.apache.log4j.jdbcplus.JDBCAppender

# A1 uses PatternLayout.
log4j.appender.MYSQL_JDBC_APPENDER.url=jdbc:mysql://localhost:3306/test
log4j.appender.MYSQL_JDBC_APPENDER.dbclass=com.mysql.jdbc.Driver
log4j.appender.MYSQL_JDBC_APPENDER.username=root
log4j.appender.MYSQL_JDBC_APPENDER.password=
log4j.appender.MYSQL_JDBC_APPENDER.sql=INSERT INTO log (message) values ('@MSG@')
log4j.appender.MYSQL_JDBC_APPENDER.ConversionPattern=[%t] %m %l##%d{dd.MM.yyyy}#%d{HH:mm:ss}
log4j.appender.MYSQL_JDBC_APPENDER.layoutPartsDelimiter=#
log4j.appender.MYSQL_JDBC_APPENDER.buffer=1
log4j.appender.MYSQL_JDBC_APPENDER.commit=true
log4j.appender.MYSQL_JDBC_APPENDER.quoteReplace=true
log4j.appender.MYSQL_JDBC_APPENDER.throwableMaxChars=3000
Hier http://www.dankomannhaupt.de/projects/jdbcappender/doc/org/apache/log4j/jdbcplus/JDBCAppender.html findet man einige Konfigurationsbeispiele.

Gruss Tom
 
Vielen Dank, aber so weit war ich schon. Es geht mir um das Problem, dass ich nur ein Object (also die msg) übergeben kann. Ich möchte aber mit
log4j.appender.jdbc.sql=insert into logTable (message, class, priority, log_date)
values ('%m', '%c', '%p', '%d')
mehrere ( hier 4 ) Angaben für den DB-Eintrag übergeben.
Kann ich nicht mit
log4j.rootCategory=DEBUG, dest
log4j.Category=FATAL, rolling1
FATAL-Meldungen nach rolling1 und alle Meldungen nach dest schreiben?
 
Hallo Thomas,
Ich bin Anfängerin mit Log4J und ich hätte eine Frage zu dir :
sollte hier dein JDBCAppender Beispiel korrekt so laufen ?
Ich habe deinen Code noch etwas bearbeitet und sieht jetzt bei mir so aus :

Java:
package delete_test;

import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.*;

public class Main
{
  public static void main( String[] args )
  {
    PropertyConfigurator.configureAndWatch( "log4j.properties" );
    new Log4jJDBCAppenderExample();
  }
}

Java:
package delete_test;

import org.apache.log4j.Logger;

public class Log4jJDBCAppenderExample {

	static Logger logger = Logger.getLogger(Log4jJDBCAppenderExample.class);
	Log4jJDBCAppenderExample(){
	  
		logger.info(  "INFO"  );
	    logger.error( "ERROR" );
	  }
	}

log4j.xml
Code:
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, ORACLE_JDBC_APPENDER

# A1 is set to be a ConsoleAppender.
log4j.appender.ORACLE_JDBC_APPENDER=org.apache.log4j.jdbcplus
log4j.appender.ORACLE_JDBC_APPENDER.layout=org.apache.log4j.PatternLayout
# A1 uses PatternLayout.
#log4j.appender.ORACLE_JDBC_APPENDER.driver=oracle.jdbc.driver.OracleDriver
log4j.appender.ORACLE_JDBC_APPENDER.url=jdbc:oracle:thin:@manuel-kron:1521:KVGDB10
log4j.appender.ORACLE_JDBC_APPENDER.dbclass=oracle.jdbc.driver.OracleDriver
log4j.appender.ORACLE_JDBC_APPENDER.username=*
log4j.appender.ORACLE_JDBC_APPENDER.password=*****
log4j.appender.ORACLE_JDBC_APPENDER.sql=INSERT INTO TEST_FEHLERPROTOKOLL (SPALTE1) VALUES ('@MSG@')
log4j.appender.ORACLE_JDBC_APPENDER.ConversionPattern=[%t] %m %l##%d{dd.MM.yyyy}#%d{HH:mm:ss}
log4j.appender.ORACLE_JDBC_APPENDER.layoutPartsDelimiter=#
log4j.appender.ORACLE_JDBC_APPENDER.buffer=1
log4j.appender.ORACLE_JDBC_APPENDER.commit=true
log4j.appender.ORACLE_JDBC_APPENDER.quoteReplace=true
log4j.appender.ORACLE_JDBC_APPENDER.throwableMaxChars=3000

P.S.Wo und wie muss ich mein @MSG@ definieren ?
Auf eine schnelle Antwort würde ich mich sehr freuen :)
Danke schön!
Grüße, Nina
 
Zuletzt bearbeitet von einem Moderator:
Zurück