2011-08-25 1 views
6

Chcę zalogować wszystkie przygotowane instrukcje sql w mojej aplikacji java. Używam standardowego sterownika Postgres jdbc org.postgresql.Driver. Ten sterownik ma parametr o nazwie " loglevel", który można ustawić na 1 (INFO) lub 2 (DEBUG). Chodzi o to, czy parametr jest ustawiony na 1, to prawie zalogowaniu nic, jeśli wartość 2 to śledzenie zbyt dużo jakRejestrowanie przygotowanych instrukcji sql w postgresowym sterowniku jdbc

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

Czy istnieje sposób, aby tylko zalogować sprawozdania + parametry?

Odpowiedz

7

Masz szczęście, że korzystasz z PostgreSQL. Implementacja sterownika JDBC PostgreSQL w wersji PreparedStatement (przynajmniej od wersji 8.x lub czegoś podobnego) została w ten sposób zastąpiona wartością toString(), dzięki czemu można było zobaczyć całą instrukcję SQL z wszystkimi parametrami wypełnionymi we właściwych miejscach. Więc może po prostu zrobić coś takiego:

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

(gdzie logger jest właśnie Twój rejestrator, np slf4j/logback lub coś)

+0

nie widzę tego w wersji sterownika 9.1. – Pointy

+0

Działa dla mnie z 9.3. –

+0

Jeśli masz dostęp do kodu aplikacji, tak. Masz pomysł, jak zarejestrować instrukcję kodu zewnętrznego, której nie możesz zmienić (ale skonfigurujesz rejestrowanie)? – Thilo