diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java index d2320286616022..31691b9aded410 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java @@ -279,10 +279,19 @@ public static class HibernateOrmConfigLog { /** * Show SQL logs and format them nicely. *

+ * true logs sql statements + * extended logs sql statements and bind parameter values + *

* Setting it to true is obviously not recommended in production. */ - @ConfigItem(defaultValue = "false") - public boolean sql; + @ConfigItem(defaultValueDocumentation = "false") + public Optional sql; + + public enum HibernateOrmConfigLogSqlValue { + FALSE, + TRUE, + EXTENDED; + } /** * Whether JDBC warnings should be collected and logged. @@ -291,7 +300,7 @@ public static class HibernateOrmConfigLog { public Optional jdbcWarnings; public boolean isAnyPropertySet() { - return sql || jdbcWarnings.isPresent(); + return sql.isPresent() || jdbcWarnings.isPresent(); } } diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java index 4a273307e31568..2d3ae51e351067 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java @@ -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; @@ -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; @@ -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()) { @@ -716,6 +723,18 @@ private void handleHibernateORMWithNoPersistenceXml( } } + @BuildStep + public void produceLoggingCategories(BuildProducer 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 guessDialect(Optional dbKind) { // For now select the latest dialect from the driver // later, we can keep doing that but also avoid DCE