diff --git a/file-split-log-xml/pom.xml b/file-split-log-xml/pom.xml
index c1f210e..309985a 100644
--- a/file-split-log-xml/pom.xml
+++ b/file-split-log-xml/pom.xml
@@ -67,7 +67,7 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-timer</artifactId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -75,12 +75,28 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-timer</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-xml-io</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-file</artifactId>
         </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -240,6 +256,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/file-split-log-xml/src/main/resources/application.properties b/file-split-log-xml/src/main/resources/application.properties
index ab79f43..76bf7d8 100644
--- a/file-split-log-xml/src/main/resources/application.properties
+++ b/file-split-log-xml/src/main/resources/application.properties
@@ -18,8 +18,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
-
-quarkus.log.category."org.apache.camel.main".level = DEBUG
+quarkus.log.file.enable = true
 
 #
 # Camel
@@ -29,4 +28,3 @@
 camel.file.route.folder = src/main/resources/file
 camel.file.repeat.interval = 30000
 camel.file.split.parallel = false
-
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/file-split-log-xml/src/test/java/org/acme/filereader/FileSplitLogXmlIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to file-split-log-xml/src/test/java/org/acme/filereader/FileSplitLogXmlIT.java
index 1db4c3e..864e86a 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/file-split-log-xml/src/test/java/org/acme/filereader/FileSplitLogXmlIT.java
@@ -14,27 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.filereader;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
+@NativeImageTest
+class FileSplitLogXmlIT extends FileSplitLogXmlTest {
 
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
 }
diff --git a/file-split-log-xml/src/test/java/org/acme/filereader/FileSplitLogXmlTest.java b/file-split-log-xml/src/test/java/org/acme/filereader/FileSplitLogXmlTest.java
new file mode 100644
index 0000000..d3a502c
--- /dev/null
+++ b/file-split-log-xml/src/test/java/org/acme/filereader/FileSplitLogXmlTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.filereader;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class FileSplitLogXmlTest {
+
+    @Test
+    public void testFileSplitLogXml() {
+        // Verify that all 1000 items were output to the log
+        File quarkusLogFile = getQuarkusLogFile();
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+            return log.contains("line 1000 contains: Anna,COOKE");
+        });
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target";
+        String packageType = System.getProperty("quarkus.package.type");
+        if (packageType != null && packageType.equals("native")) {
+            pathPrefix += "/target";
+        }
+        return new File(pathPrefix + "/quarkus.log");
+    }
+}
diff --git a/health/pom.xml b/health/pom.xml
index b798a6d..177fccd 100644
--- a/health/pom.xml
+++ b/health/pom.xml
@@ -62,11 +62,6 @@
 
     <dependencies>
         <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-resteasy</artifactId>
-        </dependency>
-
-        <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-bean</artifactId>
         </dependency>
@@ -80,15 +75,26 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-netty</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
+
+        <!-- Test -->
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-microprofile-health</artifactId>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/health/src/test/java/org/acme/health/HealthIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to health/src/test/java/org/acme/health/HealthIT.java
index 1db4c3e..adacdc9 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/health/src/test/java/org/acme/health/HealthIT.java
@@ -14,27 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.health;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
-
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
+@NativeImageTest
+class HealthIT extends HealthTest {
 }
diff --git a/health/src/test/java/org/acme/health/HealthTest.java b/health/src/test/java/org/acme/health/HealthTest.java
new file mode 100644
index 0000000..c12c1e0
--- /dev/null
+++ b/health/src/test/java/org/acme/health/HealthTest.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.health;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+
+@QuarkusTest
+public class HealthTest {
+
+    @Test
+    public void testHealth() throws InterruptedException {
+        RestAssured.get("/q/health")
+                .then()
+                .statusCode(200)
+                .body("status", is("UP"),
+                        "checks.status", containsInAnyOrder("UP", "UP", "UP"),
+                        "checks.name",
+                        containsInAnyOrder("camel-readiness-checks", "camel-liveness-checks", "camel-context-check"),
+                        "checks.data.contextStatus", containsInAnyOrder(null, null, "Started"));
+    }
+}
diff --git a/http-log/pom.xml b/http-log/pom.xml
index 7449d8d..a8208e7 100644
--- a/http-log/pom.xml
+++ b/http-log/pom.xml
@@ -62,10 +62,9 @@
 
     <dependencies>
         <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-resteasy</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-log</artifactId>
         </dependency>
-
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-main</artifactId>
@@ -76,16 +75,28 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-log</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-microprofile-health</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-microprofile-metrics</artifactId>
         </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -241,6 +252,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/http-log/src/main/resources/META-INF/resources/index.html b/http-log/src/main/resources/META-INF/resources/index.html
deleted file mode 100644
index cb44c76..0000000
--- a/http-log/src/main/resources/META-INF/resources/index.html
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
--->
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>code-with-quarkus - 1.0.0-SNAPSHOT</title>
-    <style>
-        h1, h2, h3, h4, h5, h6 {
-            margin-bottom: 0.5rem;
-            font-weight: 400;
-            line-height: 1.5;
-        }
-
-        h1 {
-            font-size: 2.5rem;
-        }
-
-        h2 {
-            font-size: 2rem
-        }
-
-        h3 {
-            font-size: 1.75rem
-        }
-
-        h4 {
-            font-size: 1.5rem
-        }
-
-        h5 {
-            font-size: 1.25rem
-        }
-
-        h6 {
-            font-size: 1rem
-        }
-
-        .lead {
-            font-weight: 300;
-            font-size: 2rem;
-        }
-
-        .banner {
-            font-size: 2.7rem;
-            margin: 0;
-            padding: 2rem 1rem;
-            background-color: #00A1E2;
-            color: white;
-        }
-
-        body {
-            margin: 0;
-            font-family: -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
-        }
-
-        code {
-            font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-            font-size: 87.5%;
-            color: #e83e8c;
-            word-break: break-word;
-        }
-
-        .left-column {
-            padding: .75rem;
-            max-width: 75%;
-            min-width: 55%;
-        }
-
-        .right-column {
-            padding: .75rem;
-            max-width: 25%;
-        }
-
-        .container {
-            display: flex;
-            width: 100%;
-        }
-
-        li {
-            margin: 0.75rem;
-        }
-
-        .right-section {
-            margin-left: 1rem;
-            padding-left: 0.5rem;
-        }
-
-        .right-section h3 {
-            padding-top: 0;
-            font-weight: 200;
-        }
-
-        .right-section ul {
-            border-left: 0.3rem solid #00A1E2;
-            list-style-type: none;
-            padding-left: 0;
-        }
-
-    </style>
-</head>
-<body>
-
-<div class="banner lead">
-    Your new Cloud-Native application is ready!
-</div>
-
-<div class="container">
-    <div class="left-column">
-        <p class="lead"> Congratulations, you have created a new Quarkus application.</p>
-
-        <h2>Why do you see this?</h2>
-
-        <p>This page is served by Quarkus. The source is in
-            <code>src/main/resources/META-INF/resources/index.html</code>.</p>
-
-        <h2>What can I do from here?</h2>
-
-        <p>If not already done, run the application in <em>dev mode</em> using: <code>mvn compile quarkus:dev</code>.
-        </p>
-        <ul>
-            <li>Add REST resources, Servlets, functions and other services in <code>src/main/java</code>.</li>
-            <li>Your static assets are located in <code>src/main/resources/META-INF/resources</code>.</li>
-            <li>Configure your application in <code>src/main/resources/application.properties</code>.
-            </li>
-        </ul>
-
-        <h2>How do I get rid of this page?</h2>
-        <p>Just delete the <code>src/main/resources/META-INF/resources/index.html</code> file.</p>
-    </div>
-    <div class="right-column">
-        <div class="right-section">
-            <h3>Application</h3>
-            <ul>
-                <li>GroupId: org.apache.camel.quarkus</li>
-                <li>ArtifactId: http-log</li>
-                <li>Version: 1.0.0-SNAPSHOT</li>
-                <li>Quarkus Version: 1.3.2.Final</li>
-            </ul>
-        </div>
-        <div class="right-section">
-            <h3>Next steps</h3>
-            <ul>
-                <li><a href="https://quarkus.io/guides/maven-tooling.html" target="_blank">Setup your IDE</a></li>
-                <li><a href="https://quarkus.io/guides/getting-started.html" target="_blank">Getting started</a></li>
-                <li><a href="https://quarkus.io" target="_blank">Quarkus Web Site</a></li>
-            </ul>
-        </div>
-    </div>
-</div>
-
-
-</body>
-</html>
\ No newline at end of file
diff --git a/http-log/src/main/resources/application.properties b/http-log/src/main/resources/application.properties
index 1d0efa7..1ed3a9f 100644
--- a/http-log/src/main/resources/application.properties
+++ b/http-log/src/main/resources/application.properties
@@ -18,6 +18,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 #
 # Quarkus - Camel
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/http-log/src/test/java/org/acme/http/HttpLogIT.java
similarity index 66%
rename from http-log/src/main/java/org/acme/http/ExampleResource.java
rename to http-log/src/test/java/org/acme/http/HttpLogIT.java
index 1db4c3e..3a792d4 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/http-log/src/test/java/org/acme/http/HttpLogIT.java
@@ -16,25 +16,8 @@
  */
 package org.acme.http;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
-
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
+@NativeImageTest
+class HttpLogIT extends HttpLogTest {
 }
diff --git a/http-log/src/test/java/org/acme/http/HttpLogTest.java b/http-log/src/test/java/org/acme/http/HttpLogTest.java
new file mode 100644
index 0000000..624db1e
--- /dev/null
+++ b/http-log/src/test/java/org/acme/http/HttpLogTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.http;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class HttpLogTest {
+
+    @Test
+    public void testHttpLog() {
+        RestAssured.get("/camel/hello")
+                .then()
+                .statusCode(200);
+
+        File quarkusLogFile = getQuarkusLogFile();
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+            return log.contains("Camel runs on");
+        });
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target";
+        String packageType = System.getProperty("quarkus.package.type");
+        if (packageType != null && packageType.equals("native")) {
+            pathPrefix += "/target";
+        }
+        return new File(pathPrefix + "/quarkus.log");
+    }
+}
diff --git a/timer-log-cdi/pom.xml b/timer-log-cdi/pom.xml
index 93597f7..3ab588e 100644
--- a/timer-log-cdi/pom.xml
+++ b/timer-log-cdi/pom.xml
@@ -63,11 +63,27 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-timer</artifactId>
+            <artifactId>camel-quarkus-log</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-log</artifactId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-timer</artifactId>
+        </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 
@@ -224,6 +240,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/timer-log-cdi/src/main/resources/application.properties b/timer-log-cdi/src/main/resources/application.properties
index 63dd4fa..2346366 100644
--- a/timer-log-cdi/src/main/resources/application.properties
+++ b/timer-log-cdi/src/main/resources/application.properties
@@ -19,6 +19,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 #
 # Integration
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/timer-log-cdi/src/test/java/org/acme/timer/TimerLogCdiIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to timer-log-cdi/src/test/java/org/acme/timer/TimerLogCdiIT.java
index 1db4c3e..eb82d87 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/timer-log-cdi/src/test/java/org/acme/timer/TimerLogCdiIT.java
@@ -14,27 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.timer;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
+@NativeImageTest
+class TimerLogCdiIT extends TimerLogCdiTest {
 
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
 }
diff --git a/timer-log-cdi/src/test/java/org/acme/timer/TimerLogCdiTest.java b/timer-log-cdi/src/test/java/org/acme/timer/TimerLogCdiTest.java
new file mode 100644
index 0000000..9259c7c
--- /dev/null
+++ b/timer-log-cdi/src/test/java/org/acme/timer/TimerLogCdiTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.timer;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class TimerLogCdiTest {
+
+    @Test
+    public void testTimerLog() {
+        File quarkusLogFile = getQuarkusLogFile();
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+            return log.contains("Incremented the counter");
+        });
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target";
+        String packageType = System.getProperty("quarkus.package.type");
+        if (packageType != null && packageType.equals("native")) {
+            pathPrefix += "/target";
+        }
+        return new File(pathPrefix + "/quarkus.log");
+    }
+}
diff --git a/timer-log-kotlin/pom.xml b/timer-log-kotlin/pom.xml
index ba01e3f..cf11e91 100644
--- a/timer-log-kotlin/pom.xml
+++ b/timer-log-kotlin/pom.xml
@@ -64,11 +64,7 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-main</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-timer</artifactId>
+            <artifactId>camel-quarkus-kotlin</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
@@ -76,11 +72,34 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-kotlin</artifactId>
+            <artifactId>camel-quarkus-main</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-timer</artifactId>
+        </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 
     <build>
+        <sourceDirectory>src/main/kotlin</sourceDirectory>
+        <testSourceDirectory>src/test/kotlin</testSourceDirectory>
+
         <pluginManagement>
             <plugins>
 
@@ -178,7 +197,6 @@
             </plugins>
         </pluginManagement>
 
-        <sourceDirectory>src/main/kotlin</sourceDirectory>
         <plugins>
             <plugin>
                 <groupId>io.quarkus</groupId>
@@ -272,6 +290,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/timer-log-kotlin/src/main/resources/application.properties b/timer-log-kotlin/src/main/resources/application.properties
index 16b8c20..6302ccf 100644
--- a/timer-log-kotlin/src/main/resources/application.properties
+++ b/timer-log-kotlin/src/main/resources/application.properties
@@ -18,6 +18,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 # to turn on DEBUG logging in camel-main
 # quarkus.log.category."org.apache.camel.main".level = DEBUG
diff --git a/timer-log-kotlin/src/test/kotlin/org/acme/timer/TimerLogKotlin.kt b/timer-log-kotlin/src/test/kotlin/org/acme/timer/TimerLogKotlin.kt
new file mode 100644
index 0000000..07e0f22
--- /dev/null
+++ b/timer-log-kotlin/src/test/kotlin/org/acme/timer/TimerLogKotlin.kt
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.timer
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.awaitility.Awaitility.await
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+open class TimerLogKotlinTest {
+
+    @Test
+    fun testTimerLogKotlin() {
+        val packageType = System.getProperty("quarkus.package.type")
+        var pathPrefix = "target"
+        if (packageType != null && packageType == "native") {
+            pathPrefix += "/target"
+        }
+
+        val quarkusLogFile = File("$pathPrefix/quarkus.log")
+
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until {
+            quarkusLogFile.readText(StandardCharsets.UTF_8).contains("Hello from Kotlin!")
+        }
+    }
+}
\ No newline at end of file
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/timer-log-kotlin/src/test/kotlin/org/acme/timer/TimerLogKotlinIT.kt
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to timer-log-kotlin/src/test/kotlin/org/acme/timer/TimerLogKotlinIT.kt
index 1db4c3e..dd3157a 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/timer-log-kotlin/src/test/kotlin/org/acme/timer/TimerLogKotlinIT.kt
@@ -14,27 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.timer
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
-
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
-}
+@NativeImageTest
+class TimerLogKotlinIT : TimerLogKotlinTest()
diff --git a/timer-log-main/pom.xml b/timer-log-main/pom.xml
index f105513..96700f6 100644
--- a/timer-log-main/pom.xml
+++ b/timer-log-main/pom.xml
@@ -45,6 +45,8 @@
         <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
         <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
         <mycila-license.version>3.0</mycila-license.version>
+
+        <quarkus.runner>${project.build.directory}/quarkus-app/quarkus-run.jar</quarkus.runner>
     </properties>
 
     <dependencyManagement>
@@ -57,21 +59,54 @@
                 <type>pom</type>
                 <scope>import</scope>
             </dependency>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-bom-test</artifactId>
+                <version>${camel-quarkus.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-log</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-main</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.rest-assured</groupId>
+            <artifactId>rest-assured</artifactId>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-log</artifactId>
+            <artifactId>camel-quarkus-integration-tests-process-executor-support</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 
@@ -113,16 +148,27 @@
                     </configuration>
                 </plugin>
 
+                <!-- Move surefire:test to integration-test phase to be able to execute the runner JAR from a test -->
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>${maven-surefire-plugin.version}</version>
-                    <configuration>
-                        <failIfNoTests>false</failIfNoTests>
-                        <systemProperties>
-                            <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
-                        </systemProperties>
-                    </configuration>
+                    <executions>
+                        <execution>
+                            <id>default-test</id>
+                            <goals>
+                                <goal>test</goal>
+                            </goals>
+                            <phase>integration-test</phase>
+                            <configuration>
+                                <failIfNoTests>false</failIfNoTests>
+                                <systemProperties>
+                                    <java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
+                                    <quarkus.runner>${quarkus.runner}</quarkus.runner>
+                                </systemProperties>
+                            </configuration>
+                        </execution>
+                    </executions>
                 </plugin>
 
                 <plugin>
@@ -227,7 +273,30 @@
             </activation>
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
+                <quarkus.runner>${project.build.directory}/${project.artifactId}-${project.version}-runner</quarkus.runner>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                        <quarkus.runner>${quarkus.runner}</quarkus.runner>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/timer-log-main/src/main/java/org/acme/timer/Main.java b/timer-log-main/src/main/java/org/acme/timer/Main.java
index 575f326..342785a 100644
--- a/timer-log-main/src/main/java/org/acme/timer/Main.java
+++ b/timer-log-main/src/main/java/org/acme/timer/Main.java
@@ -26,10 +26,12 @@
 import io.quarkus.runtime.Quarkus;
 import io.quarkus.runtime.annotations.QuarkusMain;
 import org.apache.camel.quarkus.main.CamelMainApplication;
+import org.jboss.logging.Logger;
 
 @QuarkusMain
 public class Main {
 
+    private static final Logger LOG = Logger.getLogger(Main.class);
     private static String greeting;
 
     public static void main(String... args) {
@@ -39,18 +41,24 @@
          * @Inject @Named("greeting")
          * And we pass the second argument as -durationMaxMessages which is the number of messages that the application
          * will process before terminating */
-        if (args.length < 2) {
-            throw new IllegalStateException("Expected at least two CLI arguments");
-        }
-        int i = 0;
         List<String> filteredArgs = new ArrayList<>(args.length);
-        greeting = args[i++];
-        final String repeatTimes = args[i++];
-        filteredArgs.add("-durationMaxMessages");
-        filteredArgs.add(repeatTimes);
+        if (args.length < 2) {
+            LOG.warnf(
+                    "Expected at least 2 CLI arguments but got %d. Will proceed with default greeting. Refer to the README instructions.",
+                    args.length);
+            greeting = "Hello";
+            filteredArgs.add("-durationMaxMessages");
+            filteredArgs.add("2");
+        } else {
+            int i = 0;
+            greeting = args[i++];
+            final String repeatTimes = args[i++];
+            filteredArgs.add("-durationMaxMessages");
+            filteredArgs.add(repeatTimes);
 
-        for (; i < args.length; i++) {
-            filteredArgs.add(args[i++]);
+            for (; i < args.length; i++) {
+                filteredArgs.add(args[i++]);
+            }
         }
 
         Quarkus.run(CamelMainApplication.class, filteredArgs.toArray(new String[filteredArgs.size()]));
diff --git a/timer-log-main/src/main/resources/application.properties b/timer-log-main/src/main/resources/application.properties
index 3a0d58c..65d45b5 100644
--- a/timer-log-main/src/main/resources/application.properties
+++ b/timer-log-main/src/main/resources/application.properties
@@ -19,6 +19,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 #
 # Camel - Main
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/timer-log-main/src/test/java/org/acme/timer/TimerLogMainIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to timer-log-main/src/test/java/org/acme/timer/TimerLogMainIT.java
index 1db4c3e..6a45cb8 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/timer-log-main/src/test/java/org/acme/timer/TimerLogMainIT.java
@@ -14,27 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.timer;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
+@NativeImageTest
+class TimerLogMainIT extends TimerLogMainTest {
 
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
 }
diff --git a/timer-log-main/src/test/java/org/acme/timer/TimerLogMainTest.java b/timer-log-main/src/test/java/org/acme/timer/TimerLogMainTest.java
new file mode 100644
index 0000000..fe0b62b
--- /dev/null
+++ b/timer-log-main/src/test/java/org/acme/timer/TimerLogMainTest.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.timer;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.apache.camel.quarkus.test.support.process.QuarkusProcessExecutor;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+import org.zeroturnaround.exec.StartedProcess;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class TimerLogMainTest {
+
+    private static final String PACKAGE_TYPE = System.getProperty("quarkus.package.type");
+
+    @Test
+    public void testTimerLogMain() throws IOException {
+        QuarkusRunnerExecutor quarkusProcessExecutor = new QuarkusRunnerExecutor();
+        StartedProcess process = quarkusProcessExecutor.start();
+
+        awaitStartup(quarkusProcessExecutor);
+
+        try {
+            File quarkusLogFile = getQuarkusLogFile();
+            await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+                String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+                return log.contains("Greetings");
+            });
+        } finally {
+            if (process != null && process.getProcess().isAlive()) {
+                process.getProcess().destroy();
+            }
+        }
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target/quarkus";
+        if (isNative()) {
+            pathPrefix += "-native";
+        }
+        return new File(pathPrefix + ".log");
+    }
+
+    private void awaitStartup(QuarkusProcessExecutor quarkusProcessExecutor) {
+        await().atMost(10, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            return isApplicationHealthy(quarkusProcessExecutor.getHttpPort());
+        });
+    }
+
+    private boolean isApplicationHealthy(int port) {
+        try {
+            int status = RestAssured.given()
+                    .port(port)
+                    .get("/health")
+                    .then()
+                    .extract()
+                    .statusCode();
+            return status == 200;
+        } catch (Exception e) {
+            return false;
+        }
+    }
+
+    private static boolean isNative() {
+        return PACKAGE_TYPE != null && PACKAGE_TYPE.equals("native");
+    }
+
+    static final class QuarkusRunnerExecutor extends QuarkusProcessExecutor {
+        @Override
+        protected List<String> command(String... args) {
+            List<String> command = super.command(args);
+            if (isNative()) {
+                command.add("-Dquarkus.log.file.path=target/quarkus-native.log");
+            } else {
+                command.add(1, "-Dquarkus.log.file.path=target/quarkus.log");
+            }
+            command.add("Greetings");
+            command.add("2");
+            return command;
+        }
+
+    }
+}
diff --git a/timer-log-spring/pom.xml b/timer-log-spring/pom.xml
index 73d0e7e..8a1bd15 100644
--- a/timer-log-spring/pom.xml
+++ b/timer-log-spring/pom.xml
@@ -63,20 +63,36 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-log</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-main</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-log</artifactId>
-        </dependency>
-        <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-spring-di</artifactId>
         </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -232,6 +248,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/timer-log-spring/src/main/resources/application.properties b/timer-log-spring/src/main/resources/application.properties
index 096809f..82f885a 100644
--- a/timer-log-spring/src/main/resources/application.properties
+++ b/timer-log-spring/src/main/resources/application.properties
@@ -19,6 +19,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 #
 # Camel
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/timer-log-spring/src/test/java/org/acme/timer/TimerLogSpringIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to timer-log-spring/src/test/java/org/acme/timer/TimerLogSpringIT.java
index 1db4c3e..dee6660 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/timer-log-spring/src/test/java/org/acme/timer/TimerLogSpringIT.java
@@ -14,27 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.timer;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
+@NativeImageTest
+class TimerLogSpringIT extends TimerLogSpringTest {
 
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
 }
diff --git a/timer-log-spring/src/test/java/org/acme/timer/TimerLogSpringTest.java b/timer-log-spring/src/test/java/org/acme/timer/TimerLogSpringTest.java
new file mode 100644
index 0000000..1691d95
--- /dev/null
+++ b/timer-log-spring/src/test/java/org/acme/timer/TimerLogSpringTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.timer;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class TimerLogSpringTest {
+
+    @Test
+    public void testTimerLogSpring() {
+        File quarkusLogFile = getQuarkusLogFile();
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+            return log.contains("Incremented the counter");
+        });
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target";
+        String packageType = System.getProperty("quarkus.package.type");
+        if (packageType != null && packageType.equals("native")) {
+            pathPrefix += "/target";
+        }
+        return new File(pathPrefix + "/quarkus.log");
+    }
+}
diff --git a/timer-log-xml/pom.xml b/timer-log-xml/pom.xml
index 5da0a9d..cc94e6c 100644
--- a/timer-log-xml/pom.xml
+++ b/timer-log-xml/pom.xml
@@ -63,19 +63,35 @@
     <dependencies>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-log</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-main</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-log</artifactId>
+            <artifactId>camel-quarkus-xml-io</artifactId>
+        </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-xml-io</artifactId>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
         </dependency>
     </dependencies>
 
@@ -235,6 +251,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/timer-log-xml/src/main/resources/application.properties b/timer-log-xml/src/main/resources/application.properties
index 20a531d..00bedd3 100644
--- a/timer-log-xml/src/main/resources/application.properties
+++ b/timer-log-xml/src/main/resources/application.properties
@@ -18,6 +18,7 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 # to turn on DEBUG logging in camel-main
 # quarkus.log.category."org.apache.camel.main".level = DEBUG
diff --git a/timer-log-xml/src/test/java/org/acme/timer/TimerLogXmlTest.java b/timer-log-xml/src/test/java/org/acme/timer/TimerLogXmlTest.java
new file mode 100644
index 0000000..823dc14
--- /dev/null
+++ b/timer-log-xml/src/test/java/org/acme/timer/TimerLogXmlTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.timer;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class TimerLogXmlTest {
+
+    @Test
+    public void testTimerLogXml() {
+        File quarkusLogFile = getQuarkusLogFile();
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+            return log.contains("Hello XML!");
+        });
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target";
+        String packageType = System.getProperty("quarkus.package.type");
+        if (packageType != null && packageType.equals("native")) {
+            pathPrefix += "/target";
+        }
+        return new File(pathPrefix + "/quarkus.log");
+    }
+}
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/timer-log-xml/src/test/java/org/acme/timer/TimerLogXmlXmlIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to timer-log-xml/src/test/java/org/acme/timer/TimerLogXmlXmlIT.java
index 1db4c3e..fd26ac0 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/timer-log-xml/src/test/java/org/acme/timer/TimerLogXmlXmlIT.java
@@ -14,27 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.timer;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
+@NativeImageTest
+class TimerLogXmlXmlIT extends TimerLogXmlTest {
 
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
 }
diff --git a/timer-log/pom.xml b/timer-log/pom.xml
index 489026a..db75ed9 100644
--- a/timer-log/pom.xml
+++ b/timer-log/pom.xml
@@ -67,12 +67,28 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-microprofile-health</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-timer</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-log</artifactId>
         </dependency>
+
+        <!-- Test -->
+        <dependency>
+            <groupId>io.quarkus</groupId>
+            <artifactId>quarkus-junit5</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.awaitility</groupId>
+            <artifactId>awaitility</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
@@ -228,6 +244,27 @@
             <properties>
                 <quarkus.package.type>native</quarkus.package.type>
             </properties>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-failsafe-plugin</artifactId>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>integration-test</goal>
+                                    <goal>verify</goal>
+                                </goals>
+                                <configuration>
+                                    <systemPropertyVariables>
+                                        <quarkus.package.type>${quarkus.package.type}</quarkus.package.type>
+                                    </systemPropertyVariables>
+                                </configuration>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
         </profile>
     </profiles>
 
diff --git a/timer-log/src/main/resources/application.properties b/timer-log/src/main/resources/application.properties
index 261dde5..bac70c3 100644
--- a/timer-log/src/main/resources/application.properties
+++ b/timer-log/src/main/resources/application.properties
@@ -18,9 +18,9 @@
 # Quarkus
 #
 quarkus.banner.enabled = false
+quarkus.log.file.enable = true
 
 #
 # Camel
 #
 camel.context.name = quarkus-camel-example-timer-log
-
diff --git a/http-log/src/main/java/org/acme/http/ExampleResource.java b/timer-log/src/test/java/org/acme/timer/TimerLogIT.java
similarity index 64%
copy from http-log/src/main/java/org/acme/http/ExampleResource.java
copy to timer-log/src/test/java/org/acme/timer/TimerLogIT.java
index 1db4c3e..2f8e97f 100644
--- a/http-log/src/main/java/org/acme/http/ExampleResource.java
+++ b/timer-log/src/test/java/org/acme/timer/TimerLogIT.java
@@ -14,27 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.acme.http;
+package org.acme.timer;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import io.quarkus.test.junit.NativeImageTest;
 
-/**
- * A JAX-RS resource
- */
-@Path("/hello")
-public class ExampleResource {
+@NativeImageTest
+class TimerLogIT extends TimerLogTest {
 
-    /**
-     * A JAX-RS endpoint always returning {@code "hello"}
-     * 
-     * @return {@code "hello"}
-     */
-    @GET
-    @Produces(MediaType.TEXT_PLAIN)
-    public String hello() {
-        return "hello";
-    }
 }
diff --git a/timer-log/src/test/java/org/acme/timer/TimerLogTest.java b/timer-log/src/test/java/org/acme/timer/TimerLogTest.java
new file mode 100644
index 0000000..dd6898d
--- /dev/null
+++ b/timer-log/src/test/java/org/acme/timer/TimerLogTest.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.acme.timer;
+
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import io.quarkus.test.junit.QuarkusTest;
+import org.apache.commons.io.FileUtils;
+import org.junit.jupiter.api.Test;
+
+import static org.awaitility.Awaitility.await;
+
+@QuarkusTest
+public class TimerLogTest {
+
+    @Test
+    public void testTimerLog() {
+        File quarkusLogFile = getQuarkusLogFile();
+        await().atMost(10L, TimeUnit.SECONDS).pollDelay(1, TimeUnit.SECONDS).until(() -> {
+            String log = FileUtils.readFileToString(quarkusLogFile, StandardCharsets.UTF_8);
+            return log.contains("Hello World");
+        });
+    }
+
+    private File getQuarkusLogFile() {
+        String pathPrefix = "target";
+        String packageType = System.getProperty("quarkus.package.type");
+        if (packageType != null && packageType.equals("native")) {
+            pathPrefix += "/target";
+        }
+        return new File(pathPrefix + "/quarkus.log");
+    }
+}
