Skip to content

Commit 34eb48e

Browse files
authored
Merge pull request #45690 from edeandrea/fix-lgtm-devservice-verbose-logging
Observability LGTM dev service filling up logs with services starting
2 parents af4449f + 6957299 commit 34eb48e

File tree

4 files changed

+78
-37
lines changed

4 files changed

+78
-37
lines changed

extensions/devservices/common/src/main/java/io/quarkus/devservices/common/JBossLoggingConsumer.java

Lines changed: 43 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import java.util.HashMap;
44
import java.util.Map;
5+
import java.util.Objects;
6+
import java.util.function.Predicate;
57

68
import org.jboss.logging.Logger;
79
import org.jboss.logging.MDC;
@@ -21,6 +23,8 @@ public class JBossLoggingConsumer extends BaseConsumer<JBossLoggingConsumer> {
2123

2224
private String prefix = "";
2325

26+
private Predicate<OutputFrame> outputPredicate = f -> true;
27+
2428
public JBossLoggingConsumer(Logger logger) {
2529
this(logger, false);
2630
}
@@ -50,39 +54,48 @@ public JBossLoggingConsumer withSeparateOutputStreams() {
5054
return this;
5155
}
5256

57+
public JBossLoggingConsumer withLoggingFilter(Predicate<OutputFrame> outputPredicate) {
58+
Objects.requireNonNull(outputPredicate);
59+
this.outputPredicate = outputPredicate;
60+
return this;
61+
}
62+
5363
@Override
5464
public void accept(OutputFrame outputFrame) {
55-
final OutputFrame.OutputType outputType = outputFrame.getType();
56-
final String utf8String = outputFrame.getUtf8StringWithoutLineEnding();
57-
58-
final Map<String, Object> originalMdc = MDC.getMap();
59-
MDC.clear();
60-
MDC.getMap().putAll(mdc);
61-
try {
62-
switch (outputType) {
63-
case END:
64-
break;
65-
case STDOUT:
66-
if (separateOutputStreams) {
67-
logger.infof("%s%s", prefix.isEmpty() ? "" : (prefix + ": "), utf8String);
68-
} else {
69-
logger.infof("%s%s: %s", prefix, outputType, utf8String);
70-
}
71-
break;
72-
case STDERR:
73-
if (separateOutputStreams) {
74-
logger.errorf("%s%s", prefix.isEmpty() ? "" : (prefix + ": "), utf8String);
75-
} else {
76-
logger.infof("%s%s: %s", prefix, outputType, utf8String);
77-
}
78-
break;
79-
default:
80-
throw new IllegalArgumentException("Unexpected outputType " + outputType);
81-
}
82-
} finally {
65+
if (this.outputPredicate.test(outputFrame)) {
66+
final OutputFrame.OutputType outputType = outputFrame.getType();
67+
final String utf8String = outputFrame.getUtf8StringWithoutLineEnding();
68+
69+
final Map<String, Object> originalMdc = MDC.getMap();
8370
MDC.clear();
84-
if (originalMdc != null) {
85-
MDC.getMap().putAll(originalMdc);
71+
MDC.getMap().putAll(mdc);
72+
73+
try {
74+
switch (outputType) {
75+
case END:
76+
break;
77+
case STDOUT:
78+
if (separateOutputStreams) {
79+
logger.infof("%s%s", prefix.isEmpty() ? "" : (prefix + ": "), utf8String);
80+
} else {
81+
logger.infof("%s%s: %s", prefix, outputType, utf8String);
82+
}
83+
break;
84+
case STDERR:
85+
if (separateOutputStreams) {
86+
logger.errorf("%s%s", prefix.isEmpty() ? "" : (prefix + ": "), utf8String);
87+
} else {
88+
logger.infof("%s%s: %s", prefix, outputType, utf8String);
89+
}
90+
break;
91+
default:
92+
throw new IllegalArgumentException("Unexpected outputType " + outputType);
93+
}
94+
} finally {
95+
MDC.clear();
96+
if (originalMdc != null) {
97+
MDC.getMap().putAll(originalMdc);
98+
}
8699
}
87100
}
88101
}

extensions/observability-devservices/testcontainers/src/main/java/io/quarkus/observability/testcontainers/GrafanaContainer.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.quarkus.observability.testcontainers;
22

3-
import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
3+
import org.testcontainers.containers.wait.strategy.Wait;
4+
import org.testcontainers.containers.wait.strategy.WaitAllStrategy;
45
import org.testcontainers.containers.wait.strategy.WaitStrategy;
56

67
import io.quarkus.observability.common.config.GrafanaConfig;
@@ -26,10 +27,15 @@ public int getGrafanaPort() {
2627
}
2728

2829
private WaitStrategy grafanaWaitStrategy() {
29-
return new HttpWaitStrategy()
30-
.forPath("/")
31-
.forPort(config.grafanaPort())
32-
.forStatusCode(200)
33-
.withStartupTimeout(config.timeout());
30+
return new WaitAllStrategy()
31+
.withStartupTimeout(config.timeout())
32+
.withStrategy(
33+
Wait.forHttp("/")
34+
.forPort(config.grafanaPort())
35+
.forStatusCode(200)
36+
.withStartupTimeout(config.timeout()))
37+
.withStrategy(
38+
Wait.forLogMessage(".*The OpenTelemetry collector and the Grafana LGTM stack are up and running.*", 1)
39+
.withStartupTimeout(config.timeout()));
3440
}
3541
}

extensions/observability-devservices/testcontainers/src/main/java/io/quarkus/observability/testcontainers/LgtmContainer.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import java.util.Optional;
44
import java.util.Set;
5+
import java.util.function.Predicate;
56

67
import org.eclipse.microprofile.config.Config;
78
import org.eclipse.microprofile.config.ConfigProvider;
9+
import org.testcontainers.containers.output.OutputFrame;
810
import org.testcontainers.utility.MountableFile;
911

1012
import io.quarkus.observability.common.ContainerConstants;
@@ -95,6 +97,11 @@ protected String prefix() {
9597
return "LGTM";
9698
}
9799

100+
@Override
101+
protected Predicate<OutputFrame> getLoggingFilter() {
102+
return new LgtmLoggingFilter();
103+
}
104+
98105
public String getOtlpProtocol() {
99106
return config.otlpProtocol();
100107
}
@@ -143,4 +150,12 @@ public String otlpProtocol() {
143150
return ContainerConstants.OTEL_HTTP_PROTOCOL;
144151
}
145152
}
153+
154+
protected static class LgtmLoggingFilter implements Predicate<OutputFrame> {
155+
@Override
156+
public boolean test(OutputFrame outputFrame) {
157+
final var line = outputFrame.getUtf8StringWithoutLineEnding();
158+
return !(line.startsWith("Waiting for") && line.endsWith("to start up..."));
159+
}
160+
}
146161
}

extensions/observability-devservices/testcontainers/src/main/java/io/quarkus/observability/testcontainers/ObservabilityContainer.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Optional;
88
import java.util.Set;
99
import java.util.function.Consumer;
10+
import java.util.function.Predicate;
1011

1112
import org.jboss.logging.Logger;
1213
import org.testcontainers.containers.GenericContainer;
@@ -37,8 +38,14 @@ public ObservabilityContainer(C config) {
3738

3839
protected abstract String prefix();
3940

41+
protected Predicate<OutputFrame> getLoggingFilter() {
42+
return f -> true;
43+
}
44+
4045
protected Consumer<OutputFrame> frameConsumer() {
41-
return new JBossLoggingConsumer(log).withPrefix(prefix());
46+
return new JBossLoggingConsumer(log)
47+
.withPrefix(prefix())
48+
.withLoggingFilter(getLoggingFilter());
4249
}
4350

4451
protected byte[] getResourceAsBytes(String resource) {

0 commit comments

Comments
 (0)