2016-04-19 5 views
3

JDBCAppenderを使用してデータベースにログするためのlog4jを、以下のリンクを参照して設定しようとしています。私はエラーを取得していますがlog4j type GenericObjectPoolはパラメータを取らない

http://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender

「タイプGenericObjectPoolはパラメータを取りません」。いくつかの1つ私はこのエラーを修正するために助けてください?

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="error"> 


<Appenders> 
    <JDBC name="databaseAppender" tableName="LOGGING.APPLICATION_LOG"> 
     <ConnectionFactory class="net.example.db.ConnectionFactory" method="getDatabaseConnection" /> 
     <Column name="EVENT_ID" literal="LOGGING.APPLICATION_LOG_SEQUENCE.NEXTVAL" /> 
     <Column name="EVENT_DATE" isEventTimestamp="true" /> 
     <Column name="LEVEL" pattern="%level" /> 
     <Column name="LOGGER" pattern="%logger" /> 
     <Column name="MESSAGE" pattern="%message" /> 
     <Column name="THROWABLE" pattern="%ex{full}" /> 
    </JDBC> 
    </Appenders> 
    <Loggers> 
    <Root level="warn"> 
     <AppenderRef ref="databaseAppender"/> 
    </Root> 
    </Loggers> 
</Configuration> 

ConnectionFactory.java

import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.Properties; 

import javax.sql.DataSource; 

import org.apache.commons.dbcp.DriverManagerConnectionFactory; 
import org.apache.commons.dbcp.PoolableConnection; 
import org.apache.commons.dbcp.PoolableConnectionFactory; 
import org.apache.commons.dbcp.PoolingDataSource; 
import org.apache.commons.pool.impl.GenericObjectPool; 

public class ConnectionFactory { 
    private static interface Singleton { 
     final ConnectionFactory INSTANCE = new ConnectionFactory(); 
    } 

    private final DataSource dataSource; 

    private ConnectionFactory() { 
     Properties properties = new Properties(); 
     properties.setProperty("user", "logging"); 
     properties.setProperty("password", "abc123"); // or get properties from some configuration file 

     GenericObjectPool<PoolableConnection> pool = new GenericObjectPool<PoolableConnection>(); //Error: type GenericObjectPool does not take parameters 
     DriverManagerConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
       "jdbc:mysql://example.org:3306/exampleDb", properties 
     ); 
     new PoolableConnectionFactory(
       connectionFactory, pool, null, "SELECT 1", 3, false, false, Connection.TRANSACTION_READ_COMMITTED 
     ); 

     this.dataSource = new PoolingDataSource(pool); 
    } 

    public static Connection getDatabaseConnection() throws SQLException { 
     return Singleton.INSTANCE.dataSource.getConnection(); 
    } 
} 
+0

同じ問題、解決策はありますか? – Kjenos

答えて

1

問題は自分で解決されました。

私はそれが私のためにうまく動作する依存関係を追加しました。

<dependency> 
     <groupId>commons-pool</groupId> 
     <artifactId>commons-pool</artifactId> 
     <version>1.6</version> 
    </dependency> 
関連する問題