You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/11/09 10:50:10 UTC
[camel] branch master updated: camel-core - Optimize log to reuse
default exchange formatter
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 9b0c798 camel-core - Optimize log to reuse default exchange formatter
9b0c798 is described below
commit 9b0c79840d0611f42b95bbb08c82c742a09c11a2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Nov 9 11:49:41 2020 +0100
camel-core - Optimize log to reuse default exchange formatter
---
.../apache/camel/component/log/LogComponent.java | 20 +++++++
.../apache/camel/component/log/LogEndpoint.java | 68 +++++++++++++---------
.../component/log/CustomExchangeFormatterTest.java | 4 +-
.../org/apache/camel/ExtendedCamelContext.java | 2 +-
.../camel/impl/engine/AbstractCamelContext.java | 5 +-
.../org/apache/camel/processor/LogProcessor.java | 2 +-
.../core/xml/AbstractCamelContextFactoryBean.java | 2 +-
.../camel/component/log/LogEndpointTest.java | 2 +
.../camel/main/DefaultConfigurationConfigurer.java | 15 +++--
9 files changed, 83 insertions(+), 37 deletions(-)
diff --git a/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java b/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
index 2b48e1f..e46184b 100644
--- a/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
+++ b/components/camel-log/src/main/java/org/apache/camel/component/log/LogComponent.java
@@ -38,6 +38,8 @@ public class LogComponent extends DefaultComponent {
private static final Logger LOG = LoggerFactory.getLogger(LogComponent.class);
+ private ExchangeFormatter defaultExchangeFormatter;
+
@Metadata(label = "advanced")
private ExchangeFormatter exchangeFormatter;
@@ -116,4 +118,22 @@ public class LogComponent extends DefaultComponent {
this.exchangeFormatter = exchangeFormatter;
}
+ /**
+ * Gets the default shared exchange formatter.
+ */
+ public ExchangeFormatter getDefaultExchangeFormatter() {
+ return defaultExchangeFormatter;
+ }
+
+ @Override
+ protected void doInit() throws Exception {
+ DefaultExchangeFormatter def = new DefaultExchangeFormatter();
+ def.setShowExchangePattern(true);
+ def.setSkipBodyLineSeparator(true);
+ def.setShowBody(true);
+ def.setShowBodyType(true);
+ def.setStyle(DefaultExchangeFormatter.OutputStyle.Default);
+ def.setMaxChars(10000);
+ this.defaultExchangeFormatter = def;
+ }
}
diff --git a/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java b/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
index 8345eb2..5b26785 100644
--- a/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
+++ b/components/camel-log/src/main/java/org/apache/camel/component/log/LogEndpoint.java
@@ -132,27 +132,44 @@ public class LogEndpoint extends ProcessorEndpoint {
protected void doInit() throws Exception {
super.doInit();
+ // ensure component is injected
+ if (getComponent() == null) {
+ setComponent(getCamelContext().getComponent("log"));
+ }
+
this.localFormatter = exchangeFormatter;
if (this.localFormatter == null) {
- DefaultExchangeFormatter def = new DefaultExchangeFormatter();
- def.setShowAll(showAll);
- def.setShowBody(showBody);
- def.setShowBodyType(showBodyType);
- def.setShowCaughtException(showCaughtException);
- def.setShowException(showException);
- def.setShowExchangeId(showExchangeId);
- def.setShowExchangePattern(showExchangePattern);
- def.setShowFiles(showFiles);
- def.setShowFuture(showFuture);
- def.setShowHeaders(showHeaders);
- def.setShowProperties(showProperties);
- def.setShowStackTrace(showStackTrace);
- def.setShowStreams(showStreams);
- def.setMaxChars(maxChars);
- def.setMultiline(multiline);
- def.setSkipBodyLineSeparator(skipBodyLineSeparator);
- def.setStyle(style);
- this.localFormatter = def;
+
+ // are any options configured if not we can optimize to use shared default
+ boolean changed = !showExchangePattern || !skipBodyLineSeparator || !showBody || !showBodyType || maxChars != 10000
+ || style != DefaultExchangeFormatter.OutputStyle.Default;
+ changed |= showExchangeId || showProperties || showHeaders || showException || showCaughtException
+ || showStackTrace;
+ changed |= showAll || multiline || showFuture || showStreams || showFiles;
+
+ if (changed) {
+ DefaultExchangeFormatter def = new DefaultExchangeFormatter();
+ def.setShowAll(showAll);
+ def.setShowBody(showBody);
+ def.setShowBodyType(showBodyType);
+ def.setShowCaughtException(showCaughtException);
+ def.setShowException(showException);
+ def.setShowExchangeId(showExchangeId);
+ def.setShowExchangePattern(showExchangePattern);
+ def.setShowFiles(showFiles);
+ def.setShowFuture(showFuture);
+ def.setShowHeaders(showHeaders);
+ def.setShowProperties(showProperties);
+ def.setShowStackTrace(showStackTrace);
+ def.setShowStreams(showStreams);
+ def.setMaxChars(maxChars);
+ def.setMultiline(multiline);
+ def.setSkipBodyLineSeparator(skipBodyLineSeparator);
+ def.setStyle(style);
+ this.localFormatter = def;
+ } else {
+ this.localFormatter = getComponent().getDefaultExchangeFormatter();
+ }
}
}
@@ -194,6 +211,11 @@ public class LogEndpoint extends ProcessorEndpoint {
return "log:" + logger.toString();
}
+ @Override
+ public LogComponent getComponent() {
+ return (LogComponent) super.getComponent();
+ }
+
/**
* Creates the logger {@link Processor} to be used.
*/
@@ -328,14 +350,6 @@ public class LogEndpoint extends ProcessorEndpoint {
this.groupDelay = groupDelay;
}
- public ExchangeFormatter getLocalFormatter() {
- return localFormatter;
- }
-
- public void setLocalFormatter(ExchangeFormatter localFormatter) {
- this.localFormatter = localFormatter;
- }
-
public Logger getProvidedLogger() {
return providedLogger;
}
diff --git a/components/camel-spring/src/test/java/org/apache/camel/component/log/CustomExchangeFormatterTest.java b/components/camel-spring/src/test/java/org/apache/camel/component/log/CustomExchangeFormatterTest.java
index 46d7903..72541ab 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/component/log/CustomExchangeFormatterTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/component/log/CustomExchangeFormatterTest.java
@@ -37,8 +37,8 @@ public class CustomExchangeFormatterTest extends SpringTestSupport {
continue;
}
LogEndpoint log = (LogEndpoint) ep;
- aaa = "aaa".equals(log.getLoggerName()) ? (TestExchangeFormatter) log.getLocalFormatter() : aaa;
- bbb = "bbb".equals(log.getLoggerName()) ? (TestExchangeFormatter) log.getLocalFormatter() : bbb;
+ aaa = "aaa".equals(log.getLoggerName()) ? (TestExchangeFormatter) log.getExchangeFormatter() : aaa;
+ bbb = "bbb".equals(log.getLoggerName()) ? (TestExchangeFormatter) log.getExchangeFormatter() : bbb;
}
assertNotNull(aaa);
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index a58e914..bcbb4e4 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -521,7 +521,7 @@ public interface ExtendedCamelContext extends CamelContext {
void setupManagement(Map<String, Object> options);
/**
- * Gets a list of {@link LogListener}.
+ * Gets a list of {@link LogListener} (can be null if empty).
*/
Set<LogListener> getLogListeners();
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index eb0a465..e3396a0 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -210,7 +210,7 @@ public abstract class AbstractCamelContext extends BaseService
private final List<RouteStartupOrder> routeStartupOrder = new ArrayList<>();
private final StopWatch stopWatch = new StopWatch(false);
private final Map<Class<?>, Object> extensions = new ConcurrentHashMap<>();
- private final Set<LogListener> logListeners = new LinkedHashSet<>();
+ private Set<LogListener> logListeners;
private final ThreadLocal<Set<String>> componentsInCreation = new ThreadLocal<Set<String>>() {
@Override
public Set<String> initialValue() {
@@ -2013,6 +2013,9 @@ public abstract class AbstractCamelContext extends BaseService
@Override
public void addLogListener(LogListener listener) {
+ if (logListeners == null) {
+ logListeners = new LinkedHashSet<>();
+ }
logListeners.add(listener);
}
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/LogProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/LogProcessor.java
index 2729316..685b684 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/LogProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/LogProcessor.java
@@ -76,7 +76,7 @@ public class LogProcessor extends AsyncProcessorSupport implements Traceable, Id
if (formatter != null) {
msg = formatter.format(msg);
}
- if (!listeners.isEmpty()) {
+ if (listeners != null && !listeners.isEmpty()) {
msg = fireListeners(exchange, msg);
}
logger.doLog(msg);
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 39a96ea..14cfbb7 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -409,7 +409,7 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
if (logListeners != null && !logListeners.isEmpty()) {
for (Map.Entry<String, LogListener> entry : logListeners.entrySet()) {
LogListener logListener = entry.getValue();
- if (!getContext().adapt(ExtendedCamelContext.class).getLogListeners().contains(logListener)) {
+ if (getContext().adapt(ExtendedCamelContext.class).getLogListeners() == null || !getContext().adapt(ExtendedCamelContext.class).getLogListeners().contains(logListener)) {
LOG.info("Using custom LogListener with id: {} and implementation: {}", entry.getKey(), logListener);
getContext().adapt(ExtendedCamelContext.class).addLogListener(logListener);
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointTest.java b/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointTest.java
index 801e70b..56a16bf 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/log/LogEndpointTest.java
@@ -118,6 +118,7 @@ public class LogEndpointTest extends ContextTestSupport {
@Override
public void configure() throws Exception {
LogEndpoint end = new LogEndpoint();
+ end.setComponent(context.getComponent("log"));
end.setCamelContext(context);
end.setLogger(new MyLogger());
@@ -125,6 +126,7 @@ public class LogEndpointTest extends ContextTestSupport {
endpoint.setLoggerName("loggerSetter");
endpoint.setGroupSize(10);
endpoint.setCamelContext(context);
+ endpoint.setComponent(context.getComponent("log"));
endpoint.start();
assertEquals("log:myLogger", end.getEndpointUri());
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index a35bded..d405ae7 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -355,15 +355,22 @@ public final class DefaultConfigurationConfigurer {
final Predicate<LifecycleStrategy> containsLifecycleStrategy = camelContext.getLifecycleStrategies()::contains;
registerPropertiesForBeanTypesWithCondition(registry, LifecycleStrategy.class, containsLifecycleStrategy.negate(),
camelContext::addLifecycleStrategy);
- final Predicate<LogListener> containsLogListener
- = camelContext.adapt(ExtendedCamelContext.class).getLogListeners()::contains;
- registerPropertiesForBeanTypesWithCondition(registry, LogListener.class, containsLogListener.negate(),
- camelContext.adapt(ExtendedCamelContext.class)::addLogListener);
ModelCamelContext mcc = camelContext.adapt(ModelCamelContext.class);
final Predicate<ModelLifecycleStrategy> containsModelLifecycleStrategy = mcc.getModelLifecycleStrategies()::contains;
registerPropertiesForBeanTypesWithCondition(registry, ModelLifecycleStrategy.class,
containsModelLifecycleStrategy.negate(), mcc::addModelLifecycleStrategy);
+ // log listeners
+ Map<String, LogListener> logListeners = registry.findByTypeWithName(LogListener.class);
+ if (logListeners != null && !logListeners.isEmpty()) {
+ for (LogListener logListener : logListeners.values()) {
+ boolean contains = ecc.getLogListeners() != null && ecc.getLogListeners().contains(logListener);
+ if (!contains) {
+ ecc.addLogListener(logListener);
+ }
+ }
+ }
+
// service registry
Map<String, ServiceRegistry> serviceRegistries = registry.findByTypeWithName(ServiceRegistry.class);
if (serviceRegistries != null && !serviceRegistries.isEmpty()) {