aboutsummaryrefslogtreecommitdiffstats
path: root/jaxrs_client_utils
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 /jaxrs_client_utils
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.
Diffstat (limited to 'jaxrs_client_utils')
-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);
}