Export to GitHub

jdbc-logger - Usage.wiki


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