2011-08-25 12 views
6

Quiero registrar todas las sentencias SQL preparadas en mi aplicación java. Estoy usando el driver jdbc postgres estándar org.postgresql.Driver. Este controlador tiene un parámetro llamado " loglevel" que se puede establecer en 1 (INFO) o 2 (DEPURAR). La cuestión es si el parámetro se establece en 1 el registro es casi nada, si se establece en 2 se trazaba demasiado comoRegistro de sentencias sql preparadas en el controlador jdbc de postgres

... 
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) 
... 

¿Hay una manera única para registrar los parámetros + afirmaciones?

Respuesta

7

Tienes suerte de que estés usando PostgreSQL. La implementación PreparedStatement del controlador PostgreSQL JDBC (al menos, desde 8.x o algo así) tiene su toString() anulado de esa manera para que pueda ver toda la instrucción SQL con todos los parámetros completados en los lugares correctos. Así que usted podría hacer algo como:

preparedStatement = connection.prepareStatement(sql); 
preparedStatement.setString(1, value1); 
preparedStatement.setString(2, value2); 
// ... 
logger.debug(preparedStatement); // Will show entire SQL with all values. 

(donde logger es sólo su registrador, por ejemplo slf4j/logback o algo así)

+0

que no estoy viendo esto en la versión 9.1 del controlador. – Pointy

+0

Funciona para mí con 9.3. –

+0

Si tiene acceso al código de la aplicación, sí. ¿Alguna idea de cómo registrar la declaración de código de terceros que no puede cambiar (pero configura el registro)? – Thilo

Cuestiones relacionadas