aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-07-07 10:49:43 +0200
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2020-07-07 10:49:43 +0200
commit276b8031138f7fe4257f8883a52cd02db0d1118b (patch)
tree8c206005b798882b9cf739b602c16f571c905f62
parent110a163e4c353b038379690c00ddd3035facb1dd (diff)
Block config logging from known Jersey suspects
Config log level is enabled by default in Vespa, while it's not in Java logging API. This results in a lot of unintentional noise from 3rd party libraries in our Vespa log.
-rw-r--r--jaxrs_client_utils/src/main/java/ai/vespa/util/http/VespaClientBuilderFactory.java17
1 files changed, 12 insertions, 5 deletions
diff --git a/jaxrs_client_utils/src/main/java/ai/vespa/util/http/VespaClientBuilderFactory.java b/jaxrs_client_utils/src/main/java/ai/vespa/util/http/VespaClientBuilderFactory.java
index 50e555e7acd..26ed05e71d9 100644
--- a/jaxrs_client_utils/src/main/java/ai/vespa/util/http/VespaClientBuilderFactory.java
+++ b/jaxrs_client_utils/src/main/java/ai/vespa/util/http/VespaClientBuilderFactory.java
@@ -10,7 +10,9 @@ import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.core.UriBuilder;
import java.net.URI;
+import java.util.List;
import java.util.Optional;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -22,7 +24,7 @@ import static java.util.logging.Level.CONFIG;
*
* Notes:
* - hostname verification is not enabled - CN/SAN verification is assumed to be handled by the underlying x509 trust manager.
- * - ssl context or hostname verifier must not be overriden by the caller
+ * - ssl context or hostname verifier must not be overridden by the caller
*
* @author bjorncs
*/
@@ -30,23 +32,28 @@ public class VespaClientBuilderFactory implements AutoCloseable {
private static final Logger log = Logger.getLogger(VespaClientBuilderFactory.class.getName());
+ // Keep instances of the Jersey loggers to block the JVM from GCing them in case we initialize the loggers before
+ // their owner classes (e.g ExecutorProviders) are loaded.
+ private static final List<Logger> externalJerseyLoggers = new CopyOnWriteArrayList<>();
+
static {
// CONFIG log message are logged repeatedly from these classes.
disableConfigLogging("org.glassfish.jersey.client.internal.HttpUrlConnector");
disableConfigLogging("org.glassfish.jersey.process.internal.ExecutorProviders");
+ disableConfigLogging("athenz.shade.zts.org.glassfish.jersey.client.internal.HttpUrlConnector");
+ disableConfigLogging("athenz.shade.zts.org.glassfish.jersey.process.internal.ExecutorProviders");
}
- // This method will hook a filter into the Jersey logger removing unwanted messages.
+ // This method will hook a filter into the Jersey logger removing unwanted config messages.
private static void disableConfigLogging(String className) {
@SuppressWarnings("LoggerInitializedWithForeignClass")
Logger logger = Logger.getLogger(className);
Optional<Filter> currentFilter = Optional.ofNullable(logger.getFilter());
Filter filter = logRecord ->
- !logRecord.getMessage().startsWith("Restricted headers are not enabled")
- && !logRecord.getMessage().startsWith("Selected ExecutorServiceProvider implementation")
- && !logRecord.getLevel().equals(CONFIG)
+ !logRecord.getLevel().equals(CONFIG)
&& currentFilter.map(f -> f.isLoggable(logRecord)).orElse(true); // Honour existing filter if exists
logger.setFilter(filter);
+ externalJerseyLoggers.add(logger);
}