Configure
In order to enable all JDBC statements logging for DataSource
just wrap it with LoggableDataSource
.
new LoggableDataSource(dataSource, new Slf4JLogger());
Supported loggers:
* JDK logging - JdkLogger
* SLF4J - Slf4JLogger
* log4j - Log4JLogger
You can simply create your own logger implementing Logger
interface.
Use with DBCP and SLF4J
``` package jdbc;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
import com.google.code.jdbclogger.LoggableDataSource; import com.google.code.jdbclogger.logging.Slf4JLogger;
public class Logging { private final DataSource ds;
public Logging(DataSource ds) { this.ds = ds; }
public void run() throws SQLException { runCreate(); runInsert(); }
private void runCreate() throws SQLException { Connection con = ds.getConnection(); try { Statement st = con.createStatement(); try { st.execute("create table TEST(ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(255), POS INT)"); } finally { st.close(); } } finally { con.close(); } }
private void runInsert() throws SQLException { Connection con = ds.getConnection(); try { PreparedStatement st = con.prepareStatement("insert into TEST (NAME, POS) VALUES(?, ?)"); try { for (int i = 0; i < 10; i++) { st.setString(1, "name-" + i); st.setInt(2, i); st.execute(); } } finally { st.close(); } } finally { con.close(); } }
public static void main(String[] args) throws SQLException { new Logging(createDataSource()).run(); }
private static DataSource createDataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName("org.h2.Driver"); ds.setUrl("jdbc:h2:mem:db");
return new LoggableDataSource(ds, new Slf4JLogger());
} }
```
Output:
308 [main] INFO JDBC - create table TEST(ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(255), POS INT) | ...
346 [main] INFO JDBC - create table TEST(ID INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(255), POS INT) | 36ms
394 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-0, 0) | ...
396 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-0, 0) | 2ms
397 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-1, 1) | ...
397 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-1, 1) | 0ms
397 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-2, 2) | ...
398 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-2, 2) | 1ms
398 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-3, 3) | ...
398 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-3, 3) | 0ms
398 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-4, 4) | ...
399 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-4, 4) | 1ms
399 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-5, 5) | ...
399 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-5, 5) | 0ms
399 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-6, 6) | ...
400 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-6, 6) | 1ms
400 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-7, 7) | ...
400 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-7, 7) | 0ms
400 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-8, 8) | ...
401 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-8, 8) | 1ms
401 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-9, 9) | ...
401 [main] INFO JDBC - insert into TEST (NAME, POS) VALUES(name-9, 9) | 0ms