I want to log all prepared sql statements in my java application. I’m using the standard postgres jdbc driver org.postgresql.Driver. This driver has a parameter called ”
loglevel” which can be set to 1 (INFO) or 2 (DEBUG). The point is if the parameter is set to 1 it’s almost logging nothing, if set to 2 it’s tracing too much like
...
20:59:05.608 (2) FE=> Bind(stmt=null,portal=null,$1=<'5'>,$2=<'13'>)
20:59:05.609 (2) FE=> Describe(portal=null)
20:59:05.609 (2) FE=> Execute(portal=null,limit=1)
20:59:05.609 (2) FE=> Sync
20:59:05.648 (2) <=BE ParseComplete [null]
20:59:05.649 (2) <=BE BindComplete [null]
20:59:05.649 (2) <=BE NoData
20:59:05.649 (2) <=BE CommandStatus(UPDATE 1)
...
Is there a way to only log the statements + parameters?
You’re lucky that you’re using PostgreSQL. The
PreparedStatementimplementation of the PostgreSQL JDBC driver (at least, since 8.x or something) has itstoString()overridden that way so you could see the entire SQL statement with all parameters filled in the right places. So you could just do something like:(where
loggeris just your logger, e.g. slf4j/logback or something)