From 611f5e0a2d1ab03ed6871274d02402f0062cda7c Mon Sep 17 00:00:00 2001 From: Robin De Mol Date: Thu, 7 Nov 2024 22:04:13 +0100 Subject: [PATCH] datasource devservices: showLogs Brings support for JBossLoggingConsumer to container-based datasource dev services, and adds a little section to the documentation about the new "showLogs" option. Also contains a minor correction to the AppCDS documentation. --- docs/src/main/asciidoc/appcds.adoc | 2 +- docs/src/main/asciidoc/databases-dev-services.adoc | 10 ++++++++++ .../spi/DevServicesDatasourceContainerConfig.java | 7 +++++++ .../devservices/DevServicesDatasourceProcessor.java | 1 + .../datasource/runtime/DevServicesBuildTimeConfig.java | 7 +++++++ .../db2/deployment/DB2DevServicesProcessor.java | 4 ++++ .../deployment/MariaDBDevServicesProcessor.java | 4 ++++ .../mssql/deployment/MSSQLDevServicesProcessor.java | 4 ++++ .../mysql/deployment/MySQLDevServicesProcessor.java | 4 ++++ .../oracle/deployment/OracleDevServicesProcessor.java | 4 ++++ .../deployment/PostgresqlDevServicesProcessor.java | 4 ++++ 11 files changed, 50 insertions(+), 1 deletion(-) diff --git a/docs/src/main/asciidoc/appcds.adoc b/docs/src/main/asciidoc/appcds.adoc index c3cf8afc637085..37b81abf39b8bb 100644 --- a/docs/src/main/asciidoc/appcds.adoc +++ b/docs/src/main/asciidoc/appcds.adoc @@ -102,6 +102,6 @@ When building container images using the `quarkus-container-image-jib` extension This way, by simply setting `quarkus.package.jar.appcds.enabled` to `true`, containers using the generated image can benefit from a slight reduction in startup time and memory usage. You may see that Quarkus starts a container to generate the AppCDS archive. -It does this to ensure that the Java version of the build align with that of the generated container image. +It does this to ensure that the Java version of the build aligns with that of the generated container image. It is possible to opt out of this by setting `quarkus.package.jar.appcds.use-container` to `false`. In that case, it is your responsibility to ensure that the Java version that will run the Quarkus application matches that of the machine building it. diff --git a/docs/src/main/asciidoc/databases-dev-services.adoc b/docs/src/main/asciidoc/databases-dev-services.adoc index ba3c57c3336684..5d371c224cdcf2 100644 --- a/docs/src/main/asciidoc/databases-dev-services.adoc +++ b/docs/src/main/asciidoc/databases-dev-services.adoc @@ -61,6 +61,16 @@ ibmcom/db2:11.5.0.0a mcr.microsoft.com/mssql/server:2022-latest ---- +=== Capturing Logs + +By default, logs of the underlying database are not exposed. +By capturing the logs, they become visible amongst other log statements: + +[source,properties] +---- +quarkus.datasource.devservices.show-logs=true +---- + [[reuse]] == Reusing Dev Services diff --git a/extensions/datasource/deployment-spi/src/main/java/io/quarkus/datasource/deployment/spi/DevServicesDatasourceContainerConfig.java b/extensions/datasource/deployment-spi/src/main/java/io/quarkus/datasource/deployment/spi/DevServicesDatasourceContainerConfig.java index b27a417ee1c1df..fd9a97d69377a8 100644 --- a/extensions/datasource/deployment-spi/src/main/java/io/quarkus/datasource/deployment/spi/DevServicesDatasourceContainerConfig.java +++ b/extensions/datasource/deployment-spi/src/main/java/io/quarkus/datasource/deployment/spi/DevServicesDatasourceContainerConfig.java @@ -16,6 +16,7 @@ public class DevServicesDatasourceContainerConfig { private final Optional username; private final Optional password; private final Optional initScriptPath; + private final Optional showLogs; private final Map volumes; private final boolean reuse; @@ -29,6 +30,7 @@ public DevServicesDatasourceContainerConfig(Optional imageName, Optional username, Optional password, Optional initScriptPath, + Optional showLogs, Map volumes, boolean reuse) { this.imageName = imageName; @@ -41,6 +43,7 @@ public DevServicesDatasourceContainerConfig(Optional imageName, this.username = username; this.password = password; this.initScriptPath = initScriptPath; + this.showLogs = showLogs; this.volumes = volumes; this.reuse = reuse; } @@ -85,6 +88,10 @@ public Optional getInitScriptPath() { return initScriptPath; } + public Optional getShowLogs() { + return showLogs; + } + public Map getVolumes() { return volumes; } diff --git a/extensions/datasource/deployment/src/main/java/io/quarkus/datasource/deployment/devservices/DevServicesDatasourceProcessor.java b/extensions/datasource/deployment/src/main/java/io/quarkus/datasource/deployment/devservices/DevServicesDatasourceProcessor.java index 7f82535796e37c..edc75caf1381e3 100644 --- a/extensions/datasource/deployment/src/main/java/io/quarkus/datasource/deployment/devservices/DevServicesDatasourceProcessor.java +++ b/extensions/datasource/deployment/src/main/java/io/quarkus/datasource/deployment/devservices/DevServicesDatasourceProcessor.java @@ -286,6 +286,7 @@ private RunningDevService startDevDb( dataSourceBuildTimeConfig.devservices().username(), dataSourceBuildTimeConfig.devservices().password(), dataSourceBuildTimeConfig.devservices().initScriptPath(), + dataSourceBuildTimeConfig.devservices().showLogs(), dataSourceBuildTimeConfig.devservices().volumes(), dataSourceBuildTimeConfig.devservices().reuse()); diff --git a/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java b/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java index 13e1043e86f6ce..e99ab0e56220a9 100644 --- a/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java +++ b/extensions/datasource/runtime/src/main/java/io/quarkus/datasource/runtime/DevServicesBuildTimeConfig.java @@ -89,6 +89,13 @@ public interface DevServicesBuildTimeConfig { */ Optional initScriptPath(); + /** + * Whether the logs should be consumed by the JBoss logger. + *

+ * This has no effect if the provider is not a container-based database, such as H2 or Derby. + */ + Optional showLogs(); + /** * The volumes to be mapped to the container. *

diff --git a/extensions/devservices/db2/src/main/java/io/quarkus/devservices/db2/deployment/DB2DevServicesProcessor.java b/extensions/devservices/db2/src/main/java/io/quarkus/devservices/db2/deployment/DB2DevServicesProcessor.java index 0eb630a700ee64..424a35c78e9b60 100644 --- a/extensions/devservices/db2/src/main/java/io/quarkus/devservices/db2/deployment/DB2DevServicesProcessor.java +++ b/extensions/devservices/db2/src/main/java/io/quarkus/devservices/db2/deployment/DB2DevServicesProcessor.java @@ -23,6 +23,7 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.devservices.common.ConfigureUtil; import io.quarkus.devservices.common.ContainerShutdownCloseable; +import io.quarkus.devservices.common.JBossLoggingConsumer; import io.quarkus.devservices.common.Labels; import io.quarkus.devservices.common.Volumes; import io.quarkus.runtime.LaunchMode; @@ -65,6 +66,9 @@ public RunningDevServicesDatasource startDatabase(Optional username, Opt containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam); containerConfig.getCommand().ifPresent(container::setCommand); containerConfig.getInitScriptPath().ifPresent(container::withInitScript); + if (containerConfig.getShowLogs().orElse(Boolean.FALSE)) { + container.withLogConsumer(new JBossLoggingConsumer(LOG)); + } container.start(); LOG.info("Dev Services for IBM Db2 started."); diff --git a/extensions/devservices/mariadb/src/main/java/io/quarkus/devservices/mariadb/deployment/MariaDBDevServicesProcessor.java b/extensions/devservices/mariadb/src/main/java/io/quarkus/devservices/mariadb/deployment/MariaDBDevServicesProcessor.java index 3ec8c1362a462c..3a4acf089b88ed 100644 --- a/extensions/devservices/mariadb/src/main/java/io/quarkus/devservices/mariadb/deployment/MariaDBDevServicesProcessor.java +++ b/extensions/devservices/mariadb/src/main/java/io/quarkus/devservices/mariadb/deployment/MariaDBDevServicesProcessor.java @@ -23,6 +23,7 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.devservices.common.ConfigureUtil; import io.quarkus.devservices.common.ContainerShutdownCloseable; +import io.quarkus.devservices.common.JBossLoggingConsumer; import io.quarkus.devservices.common.Labels; import io.quarkus.devservices.common.Volumes; import io.quarkus.runtime.LaunchMode; @@ -74,6 +75,9 @@ public RunningDevServicesDatasource startDatabase(Optional username, Opt containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam); containerConfig.getCommand().ifPresent(container::setCommand); containerConfig.getInitScriptPath().ifPresent(container::withInitScript); + if (containerConfig.getShowLogs().orElse(Boolean.FALSE)) { + container.withLogConsumer(new JBossLoggingConsumer(LOG)); + } container.start(); LOG.info("Dev Services for MariaDB started."); diff --git a/extensions/devservices/mssql/src/main/java/io/quarkus/devservices/mssql/deployment/MSSQLDevServicesProcessor.java b/extensions/devservices/mssql/src/main/java/io/quarkus/devservices/mssql/deployment/MSSQLDevServicesProcessor.java index 40baa951bd618f..95397cbc17e07e 100644 --- a/extensions/devservices/mssql/src/main/java/io/quarkus/devservices/mssql/deployment/MSSQLDevServicesProcessor.java +++ b/extensions/devservices/mssql/src/main/java/io/quarkus/devservices/mssql/deployment/MSSQLDevServicesProcessor.java @@ -20,6 +20,7 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.devservices.common.ConfigureUtil; import io.quarkus.devservices.common.ContainerShutdownCloseable; +import io.quarkus.devservices.common.JBossLoggingConsumer; import io.quarkus.devservices.common.Labels; import io.quarkus.devservices.common.Volumes; import io.quarkus.runtime.LaunchMode; @@ -65,6 +66,9 @@ public RunningDevServicesDatasource startDatabase(Optional username, Opt containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam); containerConfig.getCommand().ifPresent(container::setCommand); containerConfig.getInitScriptPath().ifPresent(container::withInitScript); + if (containerConfig.getShowLogs().orElse(Boolean.FALSE)) { + container.withLogConsumer(new JBossLoggingConsumer(LOG)); + } container.start(); diff --git a/extensions/devservices/mysql/src/main/java/io/quarkus/devservices/mysql/deployment/MySQLDevServicesProcessor.java b/extensions/devservices/mysql/src/main/java/io/quarkus/devservices/mysql/deployment/MySQLDevServicesProcessor.java index 1b9341a7a8eacf..ccc8c129de39c1 100644 --- a/extensions/devservices/mysql/src/main/java/io/quarkus/devservices/mysql/deployment/MySQLDevServicesProcessor.java +++ b/extensions/devservices/mysql/src/main/java/io/quarkus/devservices/mysql/deployment/MySQLDevServicesProcessor.java @@ -23,6 +23,7 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.devservices.common.ConfigureUtil; import io.quarkus.devservices.common.ContainerShutdownCloseable; +import io.quarkus.devservices.common.JBossLoggingConsumer; import io.quarkus.devservices.common.Labels; import io.quarkus.devservices.common.Volumes; import io.quarkus.runtime.LaunchMode; @@ -73,6 +74,9 @@ public RunningDevServicesDatasource startDatabase(Optional username, Opt containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam); containerConfig.getCommand().ifPresent(container::setCommand); containerConfig.getInitScriptPath().ifPresent(container::withInitScript); + if (containerConfig.getShowLogs().orElse(Boolean.FALSE)) { + container.withLogConsumer(new JBossLoggingConsumer(LOG)); + } container.start(); diff --git a/extensions/devservices/oracle/src/main/java/io/quarkus/devservices/oracle/deployment/OracleDevServicesProcessor.java b/extensions/devservices/oracle/src/main/java/io/quarkus/devservices/oracle/deployment/OracleDevServicesProcessor.java index 58448a484745a5..bbfb74bb5880f4 100644 --- a/extensions/devservices/oracle/src/main/java/io/quarkus/devservices/oracle/deployment/OracleDevServicesProcessor.java +++ b/extensions/devservices/oracle/src/main/java/io/quarkus/devservices/oracle/deployment/OracleDevServicesProcessor.java @@ -23,6 +23,7 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.devservices.common.ConfigureUtil; import io.quarkus.devservices.common.ContainerShutdownCloseable; +import io.quarkus.devservices.common.JBossLoggingConsumer; import io.quarkus.devservices.common.Labels; import io.quarkus.devservices.common.Volumes; import io.quarkus.runtime.LaunchMode; @@ -79,6 +80,9 @@ public RunningDevServicesDatasource startDatabase(Optional username, Opt containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam); containerConfig.getCommand().ifPresent(container::setCommand); containerConfig.getInitScriptPath().ifPresent(container::withInitScript); + if (containerConfig.getShowLogs().orElse(Boolean.FALSE)) { + container.withLogConsumer(new JBossLoggingConsumer(LOG)); + } container.start(); diff --git a/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java b/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java index d02a3699d844fc..6d3a8a08b9855f 100644 --- a/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java +++ b/extensions/devservices/postgresql/src/main/java/io/quarkus/devservices/postgresql/deployment/PostgresqlDevServicesProcessor.java @@ -28,6 +28,7 @@ import io.quarkus.deployment.dev.devservices.GlobalDevServicesConfig; import io.quarkus.devservices.common.ConfigureUtil; import io.quarkus.devservices.common.ContainerShutdownCloseable; +import io.quarkus.devservices.common.JBossLoggingConsumer; import io.quarkus.devservices.common.Labels; import io.quarkus.devservices.common.Volumes; import io.quarkus.runtime.LaunchMode; @@ -76,6 +77,9 @@ public RunningDevServicesDatasource startDatabase(Optional username, Opt containerConfig.getAdditionalJdbcUrlProperties().forEach(container::withUrlParam); containerConfig.getCommand().ifPresent(container::setCommand); containerConfig.getInitScriptPath().ifPresent(container::withInitScript); + if (containerConfig.getShowLogs().orElse(Boolean.FALSE)) { + container.withLogConsumer(new JBossLoggingConsumer(LOG)); + } container.start();