Ich verwende @BindBean, um mit der SQL-Abfrage zu binden. Ich kann sehen, mit "org.skife.jdbi.v2": TRACE würde mir nur die Abfrage mit Parametern als "?" Irgendeine Idee, die ich alle drucken kann?Wie protokolliere/drucke ich Abfrage und Parameter für eine Dropwizard-Anwendung?
1
A
Antwort
0
Sie können den SQL-Code durch Schreiben von SqlCustomizer protokollieren.
import org.skife.jdbi.v2.StatementContext;
import org.skife.jdbi.v2.sqlobject.SqlStatementCustomizer;
import org.skife.jdbi.v2.sqlobject.SqlStatementCustomizerFactory;
import org.skife.jdbi.v2.sqlobject.SqlStatementCustomizingAnnotation;
import org.skife.jdbi.v2.tweak.StatementCustomizer;
import java.lang.annotation.*;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@SqlStatementCustomizingAnnotation(LogSqlFactory.Factory.class)
public @interface LogSqlFactory {
static class Factory implements SqlStatementCustomizerFactory {
@Override
public SqlStatementCustomizer createForMethod(Annotation annotation, Class sqlObjectType, Method method) {
return null;
}
@Override
public SqlStatementCustomizer createForType(Annotation annotation, Class sqlObjectType) {
return q -> q.addStatementCustomizer(new StatementCustomizer() {
@Override
public void beforeExecution(PreparedStatement stmt, StatementContext ctx) throws SQLException {
System.out.println(stmt.toString());
}
@Override
public void afterExecution(PreparedStatement stmt, StatementContext ctx) throws SQLException { }
@Override
public void cleanup(StatementContext ctx) throws SQLException { }
});
}
@Override
public SqlStatementCustomizer createForParameter(Annotation annotation, Class sqlObjectType, Method method, Object arg) {
return null;
}
}
}
Gerade diese Anmerkung enthalten und diese in SQLObject verwenden. In Ihrem Fall verwenden diese Anmerkung wie dieser,
@LogSqlFactory
public inteface myinteface{
@SqlQuery("select :c1 from tablename where cond = :cd")
String returnMeValue(@Bind("c1") String c1, @Bind("cd") Integer cd);
}
Wenn Sie benutzerdefinierte Logger für die Protokollierung verwenden, dann beforeExecution Methode.
0
Verwenden Sie die DBIFactory von Dropwizard? Es konfiguriert JDBI, um diesen Weg aus der Box zu protokollieren.
Hat nicht für mich gearbeitet –