diff --git a/bom/application/pom.xml b/bom/application/pom.xml
index a23b245708ee0..57504808a7327 100644
--- a/bom/application/pom.xml
+++ b/bom/application/pom.xml
@@ -17,7 +17,7 @@
1.69
1.0.2.1
1.0.12.2
- 2.3.1.Final
+ 2.4.0.Final
4.7.0.Final
0.33.0
1.0.0
@@ -4365,6 +4365,11 @@
asm-analysis
${asm.version}
+
+ org.ow2.asm
+ asm-commons
+ ${asm.version}
+
org.slf4j
slf4j-api
diff --git a/build-parent/pom.xml b/build-parent/pom.xml
index e7c6e7f70fe40..605cba756dbd3 100644
--- a/build-parent/pom.xml
+++ b/build-parent/pom.xml
@@ -34,7 +34,7 @@
${version.surefire.plugin}
- 1.1.1
+ 1.2.0
2.0.2
1.3.3
- 2.3.1.Final
+ 2.4.0.Final
5.7.2
3.8.1
3.20.2
diff --git a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanArchives.java b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanArchives.java
index 3ea6daa02c1d2..6e7299cef1daa 100644
--- a/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanArchives.java
+++ b/independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/BeanArchives.java
@@ -32,6 +32,7 @@
import org.jboss.jandex.Index;
import org.jboss.jandex.IndexView;
import org.jboss.jandex.Indexer;
+import org.jboss.jandex.ModuleInfo;
import org.jboss.jandex.Type;
import org.jboss.logging.Logger;
@@ -177,6 +178,21 @@ public Collection getAnnotationsWithRepeatable(DotName annot
return this.index.getAnnotationsWithRepeatable(annotationName, index);
}
+ @Override
+ public Collection getKnownModules() {
+ return this.index.getKnownModules();
+ }
+
+ @Override
+ public ModuleInfo getModuleByName(DotName moduleName) {
+ return this.index.getModuleByName(moduleName);
+ }
+
+ @Override
+ public Collection getKnownUsers(DotName className) {
+ return this.index.getKnownUsers(className);
+ }
+
private void getAllKnownSubClasses(DotName className, Set allKnown, Set processedClasses) {
final Set subClassesToProcess = new HashSet();
subClassesToProcess.add(className);
diff --git a/independent-projects/resteasy-reactive/pom.xml b/independent-projects/resteasy-reactive/pom.xml
index f43d16df34780..97550a20502e9 100644
--- a/independent-projects/resteasy-reactive/pom.xml
+++ b/independent-projects/resteasy-reactive/pom.xml
@@ -37,7 +37,7 @@
11
2.0.2
- 2.3.1.Final
+ 2.4.0.Final
5.7.2
3.8.1
3.20.2
diff --git a/independent-projects/tools/pom.xml b/independent-projects/tools/pom.xml
index 5b5fc826e20ef..69b9bf3c9181f 100644
--- a/independent-projects/tools/pom.xml
+++ b/independent-projects/tools/pom.xml
@@ -54,7 +54,7 @@
18
2.11.0
1.6.0
- 1.1.1
+ 1.2.0
artifact-api
diff --git a/integration-tests/logging-panache/pom.xml b/integration-tests/logging-panache/pom.xml
new file mode 100644
index 0000000000000..e15484e26d3e5
--- /dev/null
+++ b/integration-tests/logging-panache/pom.xml
@@ -0,0 +1,60 @@
+
+
+ 4.0.0
+
+
+ quarkus-integration-tests-parent
+ io.quarkus
+ 999-SNAPSHOT
+
+
+ quarkus-integration-test-logging-panache
+
+ Quarkus - Integration Tests - Logging with Panache
+
+
+
+ io.quarkus
+ quarkus-arc-deployment
+ test
+
+
+ io.quarkus
+ quarkus-resteasy
+ test
+
+
+
+ io.quarkus
+ quarkus-junit5-internal
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+
+
+ io.quarkus
+ quarkus-resteasy-deployment
+ ${project.version}
+ pom
+ test
+
+
+ *
+ *
+
+
+
+
+
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/GenerateAllLogUsages.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/GenerateAllLogUsages.java
new file mode 100644
index 0000000000000..4341ee3c653da
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/GenerateAllLogUsages.java
@@ -0,0 +1,62 @@
+package io.quarkus.logging;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.Parameter;
+import java.util.Arrays;
+import java.util.Comparator;
+
+import org.jboss.logging.Logger;
+
+public class GenerateAllLogUsages {
+ public static void main(String[] args) {
+ println("package io.quarkus.logging;");
+ println("");
+ println("// generated by GenerateAllLogUsages, don't update manually");
+ println("public class GeneratedBean {");
+ println(" public void testLogging() {");
+ Arrays.stream(Log.class.getDeclaredMethods())
+ .filter(method -> Modifier.isPublic(method.getModifiers()))
+ .sorted(Comparator.comparing(Method::getName).thenComparingInt(Method::getParameterCount))
+ .forEach(method -> {
+ Parameter[] parameters = method.getParameters();
+ String[] arguments = new String[method.getParameterCount()];
+ for (int i = 0; i < parameters.length; i++) {
+ Parameter parameter = parameters[i];
+ String argument;
+ if (parameter.getType() == Object.class && "message".equals(parameter.getName())) {
+ argument = "\"foobar\"";
+ } else if (parameter.getType() == Object.class
+ && (parameter.getName().startsWith("param") || parameter.getName().startsWith("arg"))) {
+ argument = "new Object()";
+ } else if (parameter.getType() == Object[].class && "params".equals(parameter.getName())) {
+ argument = "new Object[] {}";
+ } else if (parameter.getType() == String.class && "loggerFqcn".equals(parameter.getName())) {
+ argument = "\"io.quarkus.logging.GeneratedBean\"";
+ } else if (parameter.getType() == String.class && "format".equals(parameter.getName())) {
+ argument = "\"foobar\"";
+ } else if (parameter.getType() == int.class) {
+ argument = "13";
+ } else if (parameter.getType() == long.class) {
+ argument = "42L";
+ } else if (parameter.getType() == Throwable.class) {
+ argument = "new NoStackTraceTestException()";
+ } else if (parameter.getType() == Logger.Level.class) {
+ argument = "org.jboss.logging.Logger.Level.INFO";
+ } else {
+ throw new RuntimeException("Couldn't generate argument value for parameter " + i + " of type "
+ + method.getParameterTypes()[i] + ": " + method);
+ }
+ arguments[i] = argument;
+ }
+
+ println(" Log." + method.getName() + "(" + String.join(", ", arguments) + ");");
+ });
+ println(" }");
+ println("}");
+ }
+
+ private static void println(String string) {
+ System.out.println(string);
+ }
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/GeneratedBean.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/GeneratedBean.java
new file mode 100644
index 0000000000000..7dea885e5c4c9
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/GeneratedBean.java
@@ -0,0 +1,219 @@
+package io.quarkus.logging;
+
+// generated by GenerateAllLogUsages, don't update manually
+public class GeneratedBean {
+ public void testLogging() {
+ Log.debug("foobar");
+ Log.debug("foobar", new NoStackTraceTestException());
+ Log.debug("io.quarkus.logging.GeneratedBean", "foobar", new NoStackTraceTestException());
+ Log.debug("io.quarkus.logging.GeneratedBean", "foobar", new Object[] {}, new NoStackTraceTestException());
+ Log.debugf("foobar", new Object[] {});
+ Log.debugf("foobar", new Object());
+ Log.debugf("foobar", 13);
+ Log.debugf("foobar", 42L);
+ Log.debugf("foobar", 13, new Object());
+ Log.debugf("foobar", 13, 13);
+ Log.debugf(new NoStackTraceTestException(), "foobar", 13);
+ Log.debugf(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.debugf("foobar", new Object(), new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 42L);
+ Log.debugf("foobar", 42L, new Object());
+ Log.debugf("foobar", 42L, 42L);
+ Log.debugf(new NoStackTraceTestException(), "foobar", 42L, new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 42L, 42L);
+ Log.debugf("foobar", 13, 13, new Object());
+ Log.debugf("foobar", 13, 13, 13);
+ Log.debugf(new NoStackTraceTestException(), "foobar", 13, new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 13, 13);
+ Log.debugf("foobar", 13, new Object(), new Object());
+ Log.debugf("foobar", new Object(), new Object(), new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.debugf("foobar", 42L, 42L, 42L);
+ Log.debugf("foobar", 42L, 42L, new Object());
+ Log.debugf("foobar", 42L, new Object(), new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 42L, 42L, 42L);
+ Log.debugf(new NoStackTraceTestException(), "foobar", 42L, 42L, new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 42L, new Object(), new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 13, new Object(), new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 13, 13, new Object());
+ Log.debugf(new NoStackTraceTestException(), "foobar", 13, 13, 13);
+ Log.debugv("foobar", new Object[] {});
+ Log.debugv("foobar", new Object());
+ Log.debugv(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.debugv("foobar", new Object(), new Object());
+ Log.debugv(new NoStackTraceTestException(), "foobar", new Object());
+ Log.debugv("foobar", new Object(), new Object(), new Object());
+ Log.debugv(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.debugv(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.error("foobar");
+ Log.error("foobar", new NoStackTraceTestException());
+ Log.error("io.quarkus.logging.GeneratedBean", "foobar", new NoStackTraceTestException());
+ Log.error("io.quarkus.logging.GeneratedBean", "foobar", new Object[] {}, new NoStackTraceTestException());
+ Log.errorf("foobar", new Object[] {});
+ Log.errorf("foobar", new Object());
+ Log.errorf("foobar", new Object(), new Object());
+ Log.errorf(new NoStackTraceTestException(), "foobar", new Object());
+ Log.errorf(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.errorf(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.errorf("foobar", new Object(), new Object(), new Object());
+ Log.errorf(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.errorv("foobar", new Object[] {});
+ Log.errorv("foobar", new Object());
+ Log.errorv(new NoStackTraceTestException(), "foobar", new Object());
+ Log.errorv("foobar", new Object(), new Object());
+ Log.errorv(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.errorv(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.errorv("foobar", new Object(), new Object(), new Object());
+ Log.errorv(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.fatal("foobar");
+ Log.fatal("foobar", new NoStackTraceTestException());
+ Log.fatal("io.quarkus.logging.GeneratedBean", "foobar", new NoStackTraceTestException());
+ Log.fatal("io.quarkus.logging.GeneratedBean", "foobar", new Object[] {}, new NoStackTraceTestException());
+ Log.fatalf("foobar", new Object());
+ Log.fatalf("foobar", new Object[] {});
+ Log.fatalf(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.fatalf(new NoStackTraceTestException(), "foobar", new Object());
+ Log.fatalf("foobar", new Object(), new Object());
+ Log.fatalf("foobar", new Object(), new Object(), new Object());
+ Log.fatalf(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.fatalf(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.fatalv("foobar", new Object[] {});
+ Log.fatalv("foobar", new Object());
+ Log.fatalv(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.fatalv(new NoStackTraceTestException(), "foobar", new Object());
+ Log.fatalv("foobar", new Object(), new Object());
+ Log.fatalv(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.fatalv("foobar", new Object(), new Object(), new Object());
+ Log.fatalv(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.info("foobar");
+ Log.info("foobar", new NoStackTraceTestException());
+ Log.info("io.quarkus.logging.GeneratedBean", "foobar", new NoStackTraceTestException());
+ Log.info("io.quarkus.logging.GeneratedBean", "foobar", new Object[] {}, new NoStackTraceTestException());
+ Log.infof("foobar", new Object[] {});
+ Log.infof("foobar", new Object());
+ Log.infof(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.infof(new NoStackTraceTestException(), "foobar", new Object());
+ Log.infof("foobar", new Object(), new Object());
+ Log.infof(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.infof("foobar", new Object(), new Object(), new Object());
+ Log.infof(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.infov("foobar", new Object[] {});
+ Log.infov("foobar", new Object());
+ Log.infov(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.infov(new NoStackTraceTestException(), "foobar", new Object());
+ Log.infov("foobar", new Object(), new Object());
+ Log.infov("foobar", new Object(), new Object(), new Object());
+ Log.infov(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.infov(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.isDebugEnabled();
+ Log.isEnabled(org.jboss.logging.Logger.Level.INFO);
+ Log.isInfoEnabled();
+ Log.isTraceEnabled();
+ Log.log(org.jboss.logging.Logger.Level.INFO, "foobar");
+ Log.log(org.jboss.logging.Logger.Level.INFO, "foobar", new NoStackTraceTestException());
+ Log.log(org.jboss.logging.Logger.Level.INFO, "io.quarkus.logging.GeneratedBean", "foobar",
+ new NoStackTraceTestException());
+ Log.log("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, "foobar", new Object[] {},
+ new NoStackTraceTestException());
+ Log.logf(org.jboss.logging.Logger.Level.INFO, "foobar", new Object());
+ Log.logf(org.jboss.logging.Logger.Level.INFO, "foobar", new Object[] {});
+ Log.logf(org.jboss.logging.Logger.Level.INFO, "foobar", new Object(), new Object());
+ Log.logf(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.logf(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object());
+ Log.logf(org.jboss.logging.Logger.Level.INFO, "foobar", new Object(), new Object(), new Object());
+ Log.logf("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object());
+ Log.logf("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object[] {});
+ Log.logf(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.logf("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object(), new Object());
+ Log.logf(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object(), new Object(),
+ new Object());
+ Log.logf("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object(), new Object(), new Object());
+ Log.logv(org.jboss.logging.Logger.Level.INFO, "foobar", new Object());
+ Log.logv(org.jboss.logging.Logger.Level.INFO, "foobar", new Object[] {});
+ Log.logv(org.jboss.logging.Logger.Level.INFO, "foobar", new Object(), new Object());
+ Log.logv(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object());
+ Log.logv(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.logv(org.jboss.logging.Logger.Level.INFO, "foobar", new Object(), new Object(), new Object());
+ Log.logv("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object[] {});
+ Log.logv("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object());
+ Log.logv(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.logv(org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(), "foobar", new Object(), new Object(),
+ new Object());
+ Log.logv("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object(), new Object());
+ Log.logv("io.quarkus.logging.GeneratedBean", org.jboss.logging.Logger.Level.INFO, new NoStackTraceTestException(),
+ "foobar", new Object(), new Object(), new Object());
+ Log.trace("foobar");
+ Log.trace("foobar", new NoStackTraceTestException());
+ Log.trace("io.quarkus.logging.GeneratedBean", "foobar", new NoStackTraceTestException());
+ Log.trace("io.quarkus.logging.GeneratedBean", "foobar", new Object[] {}, new NoStackTraceTestException());
+ Log.tracef("foobar", new Object[] {});
+ Log.tracef("foobar", new Object());
+ Log.tracef("foobar", 13);
+ Log.tracef("foobar", 42L);
+ Log.tracef(new NoStackTraceTestException(), "foobar", 42L);
+ Log.tracef("foobar", new Object(), new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.tracef(new NoStackTraceTestException(), "foobar", new Object());
+ Log.tracef("foobar", 13, new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 13);
+ Log.tracef("foobar", 13, 13);
+ Log.tracef("foobar", 42L, 42L);
+ Log.tracef("foobar", 42L, new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 42L, new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 42L, 42L);
+ Log.tracef("foobar", 42L, new Object(), new Object());
+ Log.tracef("foobar", new Object(), new Object(), new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.tracef("foobar", 13, new Object(), new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 13, 13);
+ Log.tracef("foobar", 13, 13, 13);
+ Log.tracef("foobar", 13, 13, new Object());
+ Log.tracef("foobar", 42L, 42L, 42L);
+ Log.tracef("foobar", 42L, 42L, new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 13, new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 42L, 42L, 42L);
+ Log.tracef(new NoStackTraceTestException(), "foobar", 42L, 42L, new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 42L, new Object(), new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 13, new Object(), new Object());
+ Log.tracef(new NoStackTraceTestException(), "foobar", 13, 13, 13);
+ Log.tracef(new NoStackTraceTestException(), "foobar", 13, 13, new Object());
+ Log.tracev("foobar", new Object());
+ Log.tracev("foobar", new Object[] {});
+ Log.tracev("foobar", new Object(), new Object());
+ Log.tracev(new NoStackTraceTestException(), "foobar", new Object());
+ Log.tracev(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.tracev(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.tracev("foobar", new Object(), new Object(), new Object());
+ Log.tracev(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.warn("foobar");
+ Log.warn("foobar", new NoStackTraceTestException());
+ Log.warn("io.quarkus.logging.GeneratedBean", "foobar", new NoStackTraceTestException());
+ Log.warn("io.quarkus.logging.GeneratedBean", "foobar", new Object[] {}, new NoStackTraceTestException());
+ Log.warnf("foobar", new Object[] {});
+ Log.warnf("foobar", new Object());
+ Log.warnf(new NoStackTraceTestException(), "foobar", new Object());
+ Log.warnf("foobar", new Object(), new Object());
+ Log.warnf(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.warnf(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.warnf("foobar", new Object(), new Object(), new Object());
+ Log.warnf(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ Log.warnv("foobar", new Object[] {});
+ Log.warnv("foobar", new Object());
+ Log.warnv("foobar", new Object(), new Object());
+ Log.warnv(new NoStackTraceTestException(), "foobar", new Object[] {});
+ Log.warnv(new NoStackTraceTestException(), "foobar", new Object());
+ Log.warnv(new NoStackTraceTestException(), "foobar", new Object(), new Object());
+ Log.warnv("foobar", new Object(), new Object(), new Object());
+ Log.warnv(new NoStackTraceTestException(), "foobar", new Object(), new Object(), new Object());
+ }
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingBean.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingBean.java
new file mode 100644
index 0000000000000..d137a47414e51
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingBean.java
@@ -0,0 +1,41 @@
+package io.quarkus.logging;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Singleton;
+
+@Singleton
+public class LoggingBean {
+ // not final to prevent constant inlining
+ private static String msg = "Heya!";
+
+ static {
+ Log.info(msg);
+ }
+
+ @PostConstruct
+ public void setup() {
+ Log.tracef("%s created", LoggingBean.class.getSimpleName());
+ }
+
+ public void doSomething() {
+ if (Log.isDebugEnabled()) {
+ Log.debug("starting massive computation");
+ }
+
+ Log.debugf("one: %d", 42);
+ Log.tracef("two: %d | %d", 42, 13);
+ Log.debugf("three: %d | %d | %d", 42, 13, 1);
+
+ Log.debugv("one: {0}", "foo");
+ Log.infov("two: {0} | {1}", "foo", "bar");
+ Log.warnv("three: {0} | {1} | {2}", "foo", "bar", "baz");
+ Log.errorv("four: {0} | {1} | {2} | {3}", "foo", "bar", "baz", "quux");
+
+ Exception error = new NoStackTraceTestException();
+
+ Log.warnv(error, "{0} | {1} | {2} | {3}", "foo", "bar", "baz", "quux");
+
+ Log.error("Hello Error", error);
+ }
+
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingEndpoint.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingEndpoint.java
new file mode 100644
index 0000000000000..8fe56a9d405dc
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingEndpoint.java
@@ -0,0 +1,13 @@
+package io.quarkus.logging;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+@Path("/logging")
+public class LoggingEndpoint {
+ @GET
+ public String hello() {
+ Log.info("hello");
+ return "hello";
+ }
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheDevModeTest.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheDevModeTest.java
new file mode 100644
index 0000000000000..c382c1c259d28
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheDevModeTest.java
@@ -0,0 +1,47 @@
+package io.quarkus.logging;
+
+import static io.restassured.RestAssured.when;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import java.util.List;
+import java.util.logging.Formatter;
+import java.util.stream.Collectors;
+
+import org.jboss.logmanager.formatters.PatternFormatter;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusDevModeTest;
+
+public class LoggingWithPanacheDevModeTest {
+ @RegisterExtension
+ static final QuarkusDevModeTest TEST = new QuarkusDevModeTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class).addClasses(LoggingEndpoint.class))
+ .setLogRecordPredicate(record -> "io.quarkus.logging.LoggingEndpoint".equals(record.getLoggerName()));
+
+ @Test
+ public void testRepositoryIsReloaded() {
+ Formatter formatter = new PatternFormatter("[%p] %m");
+
+ {
+ when().get("/logging").then().body(is("hello"));
+
+ List lines = TEST.getLogRecords().stream().map(formatter::format).collect(Collectors.toList());
+ assertThat(lines).containsExactly("[INFO] hello");
+ TEST.clearLogRecords();
+ }
+
+ TEST.modifySourceFile("LoggingEndpoint.java", s -> s.replace("hello", "hi"));
+
+ {
+ when().get("/logging").then().body(is("hi"));
+
+ List lines = TEST.getLogRecords().stream().map(formatter::format).collect(Collectors.toList());
+ assertThat(lines).containsExactly("[INFO] hi");
+ TEST.clearLogRecords();
+ }
+ }
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheGeneratedTest.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheGeneratedTest.java
new file mode 100644
index 0000000000000..044257cf5fabc
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheGeneratedTest.java
@@ -0,0 +1,24 @@
+package io.quarkus.logging;
+
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusUnitTest;
+
+public class LoggingWithPanacheGeneratedTest {
+ @RegisterExtension
+ static final QuarkusUnitTest test = new QuarkusUnitTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
+ .addClasses(GeneratedBean.class, NoStackTraceTestException.class))
+ .overrideConfigKey("quarkus.log.category.\"io.quarkus.logging\".min-level", "TRACE")
+ .overrideConfigKey("quarkus.log.category.\"io.quarkus.logging\".level", "TRACE");
+
+ @Test
+ public void test() {
+ new GeneratedBean().testLogging();
+ // no asserts, this test only verifies that all Log methods can be successfully invoked
+ // (in other words, that the bytecode transformation isn't horribly broken)
+ }
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheTest.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheTest.java
new file mode 100644
index 0000000000000..52b8d433aa00c
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/LoggingWithPanacheTest.java
@@ -0,0 +1,53 @@
+package io.quarkus.logging;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+import java.util.logging.Formatter;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import org.jboss.logmanager.formatters.PatternFormatter;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.test.QuarkusUnitTest;
+
+public class LoggingWithPanacheTest {
+ @RegisterExtension
+ static final QuarkusUnitTest test = new QuarkusUnitTest()
+ .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
+ .addClasses(LoggingBean.class, NoStackTraceTestException.class))
+ .overrideConfigKey("quarkus.log.category.\"io.quarkus.logging\".min-level", "TRACE")
+ .overrideConfigKey("quarkus.log.category.\"io.quarkus.logging\".level", "TRACE")
+ .setLogRecordPredicate(record -> "io.quarkus.logging.LoggingBean".equals(record.getLoggerName()))
+ .assertLogRecords(records -> {
+ Formatter formatter = new PatternFormatter("[%p] %m");
+ List lines = records.stream().map(formatter::format).map(String::trim).collect(Collectors.toList());
+
+ assertThat(lines).containsExactly(
+ "[INFO] Heya!",
+ "[TRACE] LoggingBean created",
+ "[DEBUG] starting massive computation",
+ "[DEBUG] one: 42",
+ "[TRACE] two: 42 | 13",
+ "[DEBUG] three: 42 | 13 | 1",
+ "[DEBUG] one: foo",
+ "[INFO] two: foo | bar",
+ "[WARN] three: foo | bar | baz",
+ "[ERROR] four: foo | bar | baz | quux",
+ "[WARN] foo | bar | baz | quux: io.quarkus.logging.NoStackTraceTestException",
+ "[ERROR] Hello Error: io.quarkus.logging.NoStackTraceTestException");
+ });
+
+ @Inject
+ LoggingBean bean;
+
+ @Test
+ public void test() {
+ bean.doSomething();
+ }
+}
diff --git a/integration-tests/logging-panache/src/test/java/io/quarkus/logging/NoStackTraceTestException.java b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/NoStackTraceTestException.java
new file mode 100644
index 0000000000000..9a3cf887ea1e9
--- /dev/null
+++ b/integration-tests/logging-panache/src/test/java/io/quarkus/logging/NoStackTraceTestException.java
@@ -0,0 +1,8 @@
+package io.quarkus.logging;
+
+public class NoStackTraceTestException extends RuntimeException {
+ @Override
+ public synchronized Throwable fillInStackTrace() {
+ return this;
+ }
+}
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index fb683ab4e1782..c7cadd1fe67ba 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -273,6 +273,7 @@
native-config-profile
logging-min-level-unset
logging-min-level-set
+ logging-panache
redis-devservices
diff --git a/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java b/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java
index d7c8ddabf9f88..b038d6f9b9c1c 100644
--- a/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java
+++ b/test-framework/junit5-internal/src/main/java/io/quarkus/test/QuarkusDevModeTest.java
@@ -159,6 +159,10 @@ public List getLogRecords() {
return inMemoryLogHandler.records;
}
+ public void clearLogRecords() {
+ inMemoryLogHandler.clearRecords();
+ }
+
public QuarkusDevModeTest setBuildSystemProperty(String name, String value) {
buildSystemProperties.put(name, value);
return this;