# JDBC-Appender



## lotharr (20. Juni 2006)

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


----------



## Thomas Darimont (20. Juni 2006)

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


```
/**
 * 
 */
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:

```
# 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


----------



## lotharr (21. Juni 2006)

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?


----------



## nina_85 (2. April 2008)

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 :


```
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();
  }
}
```


```
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

```
# 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


----------

