JDBC appender에서 DriverManager를 사용할 수 없다고 생각합니다. JNDI 이름을 사용하여 연결을 가져 오거나 연결 객체를 반환하는 정적 메서드가있는 connectionFactory 클래스를 만들어야합니다.
다음 링크는 도움이됩니다. http://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender
다음은 수정 된 코드입니다. 제대로 작동해야합니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
<appenders>
<Jdbc name="databaseAppender" tableName="application_log">
<ConnectionFactory class="net.example.db.ConnectionFactory" method="getDatabaseConnection" />
<Column name="level" pattern="%level" />
<Column name="logger" pattern="%logger" />
<Column name="message" pattern="%message" />
</Jdbc>
</appenders>
<loggers>
<root level="warn">
<appender-ref ref="databaseAppender"/>
</root>
</loggers>
</configuration
다음은 ConnectionFactory.java 코드입니다. 데이터베이스마다 사용자, 패스 및 연결을 변경해야합니다.
package net.example.db;
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>();
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();
}
}
이것은 저에게 효과적입니다. 그것은 또한 당신을 위해 작동해야합니다.
스프링 부트 응용 프로그램에서이를 수행하는 방법은 무엇입니까? – Krish