While doing a little research for my blogpost “Timeout Configuration in HikariCP, DB2 and MySQL” I stumbled upon a nice feature of the DB2 JDBC-Driver called logWriter.
According to the DB2 for z/OS 10.0.0 Reference you can set an (optional) character output stream to which all logging and trace messages are printed. This includes all SQL-statements as well as all values needed to insert into a prepared statement. If no output stream is set (= null) this feature is simply disabled.
Let’s say you are using Spring then you can turn this feature on using Java Config:
DB2SimpleDataSource db2DataSource = new DB2SimpleDataSource(); db2DataSource.setLogWriter(new PrintWriter(System.out)); // some more configuration
Or using Xml Config:
<bean id="dataSourceDB2" class="com.ibm.db2.jcc.DB2SimpleDataSource"> <property name="logWriter"> <bean class="java.io.PrintWriter"> <constructor-arg> <util:constant static-field="java.lang.System.out" /> </constructor-arg> </bean> </property> <!-- some more configuration --> </bean>
(Please note that printing to System.out is a reason to slap yourself. Don’t do this in production.)
Afterwards the log looks like:
14:10:37,792 INFO [stdout] (http-localhost/127.0.0.1:8080-1) [jcc][Time:2015-08-27-14:10:37.792][Thread:http-localhost/127.0.0.1:8080-1][Connection@6eb1f4fb] prepareStatement (select sometable0_.TRMNUMMER as TRMNUMME1_3_0_ from SOME_TABLE sometable0_ left outer join ANOTHER_TABLE anothertable1_ on sometable0_.TRMNUMMER=anothertable1_.TRMNUMMER where sometable0_.TRMNUMMER=?) called 14:10:37,793 INFO [stdout] (http-localhost/127.0.0.1:8080-1) [jcc][Time:2015-08-27-14:10:37.793][Thread:http-localhost/127.0.0.1:8080-1][Connection@6eb1f4fb] prepareStatement () returned com.ibm.db2.jcc.am.pn@52814790 14:10:37,793 INFO [stdout] (http-localhost/127.0.0.1:8080-1) [jcc][SystemMonitor:stop] core: 0.560809ms | network: 0.0ms | server: 0.0ms 14:10:37,793 INFO [stdout] (http-localhost/127.0.0.1:8080-1) [jcc][Time:2015-08-27-14:10:37.793][Thread:http-localhost/127.0.0.1:8080-1][PreparedStatement@52814790] setLong (1, 100238731) called 14:10:37,793 INFO [stdout] (http-localhost/127.0.0.1:8080-1) [jcc][SystemMonitor:start] 14:10:37,794 INFO [stdout] (http-localhost/127.0.0.1:8080-1) [jcc][Time:2015-08-27-14:10:37.794][Thread:http-localhost/127.0.0.1:8080-1][PreparedStatement@52814790] executeQuery () called