Skip to content

Commit

Permalink
Add logging of hibernate orm bind params
Browse files Browse the repository at this point in the history
"quarkus.hibernate-orm.log.sql" now supports an extended option, which enables logging of bind params
closes #3075
  • Loading branch information
Postremus committed Feb 29, 2020
1 parent 9138598 commit 0267ff4
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -279,10 +279,19 @@ public static class HibernateOrmConfigLog {
/**
* Show SQL logs and format them nicely.
* <p>
* true logs sql statements
* extended logs sql statements and bind parameter values
* <p>
* Setting it to true is obviously not recommended in production.
*/
@ConfigItem(defaultValue = "false")
public boolean sql;
@ConfigItem(defaultValueDocumentation = "false")
public Optional<HibernateOrmConfigLogSqlValue> sql;

public enum HibernateOrmConfigLogSqlValue {
FALSE,
TRUE,
EXTENDED;
}

/**
* Whether JDBC warnings should be collected and logged.
Expand All @@ -291,7 +300,7 @@ public static class HibernateOrmConfigLog {
public Optional<Boolean> jdbcWarnings;

public boolean isAnyPropertySet() {
return sql || jdbcWarnings.isPresent();
return sql.isPresent() || jdbcWarnings.isPresent();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import org.jboss.jandex.DotName;
import org.jboss.jandex.IndexView;
import org.jboss.jandex.Indexer;
import org.jboss.logmanager.Level;

import io.quarkus.agroal.deployment.JdbcDataSourceBuildItem;
import io.quarkus.agroal.deployment.JdbcDataSourceSchemaReadyBuildItem;
Expand All @@ -71,6 +72,7 @@
import io.quarkus.deployment.builditem.GeneratedResourceBuildItem;
import io.quarkus.deployment.builditem.HotDeploymentWatchedFileBuildItem;
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
import io.quarkus.deployment.builditem.LogCategoryBuildItem;
import io.quarkus.deployment.builditem.SystemPropertyBuildItem;
import io.quarkus.deployment.builditem.nativeimage.NativeImageResourceBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
Expand Down Expand Up @@ -642,9 +644,14 @@ private void handleHibernateORMWithNoPersistenceXml(
fetchSize.toString()));

// Logging
if (hibernateConfig.log.sql) {
desc.getProperties().setProperty(AvailableSettings.SHOW_SQL, "true");
desc.getProperties().setProperty(AvailableSettings.FORMAT_SQL, "true");
if (hibernateConfig.log.sql.isPresent()) {
HibernateOrmConfig.HibernateOrmConfigLog.HibernateOrmConfigLogSqlValue value = hibernateConfig.log.sql
.get();
if (value.ordinal() >= HibernateOrmConfig.HibernateOrmConfigLog.HibernateOrmConfigLogSqlValue.TRUE
.ordinal()) {
desc.getProperties().setProperty(AvailableSettings.SHOW_SQL, "true");
desc.getProperties().setProperty(AvailableSettings.FORMAT_SQL, "true");
}
}

if (hibernateConfig.log.jdbcWarnings.isPresent()) {
Expand Down Expand Up @@ -716,6 +723,18 @@ private void handleHibernateORMWithNoPersistenceXml(
}
}

@BuildStep
public void produceLoggingCategories(BuildProducer<LogCategoryBuildItem> categories) {
if (hibernateConfig.log.sql.isPresent()) {
HibernateOrmConfig.HibernateOrmConfigLog.HibernateOrmConfigLogSqlValue value = hibernateConfig.log.sql
.get();

if (HibernateOrmConfig.HibernateOrmConfigLog.HibernateOrmConfigLogSqlValue.EXTENDED.equals(value)) {
categories.produce(new LogCategoryBuildItem("org.hibernate.type.descriptor.sql.BasicBinder", Level.TRACE));
}
}
}

private Optional<String> guessDialect(Optional<String> dbKind) {
// For now select the latest dialect from the driver
// later, we can keep doing that but also avoid DCE
Expand Down

0 comments on commit 0267ff4

Please sign in to comment.