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 2014/04/04 08:36:52 UTC
[07/13] git commit: [CAMEL-6694] lookup logger in registry when
single instance available
[CAMEL-6694] lookup logger in registry when single instance available
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/426fa8e3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/426fa8e3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/426fa8e3
Branch: refs/heads/camel-2.13.x
Commit: 426fa8e3a53fccc4671e9e3630157ce01bb9b544
Parents: fe8360f
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Thu Apr 3 12:51:18 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:39:03 2014 +0200
----------------------------------------------------------------------
.../camel/component/log/LogComponent.java | 19 ++-
.../component/log/LogCustomLoggerTest.java | 147 +++++++++++++++++++
2 files changed, 163 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/426fa8e3/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java b/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
index b3dc3a7..5eebc25 100644
--- a/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
+++ b/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
@@ -22,13 +22,16 @@ import java.util.Map;
import org.apache.camel.Endpoint;
import org.apache.camel.LoggingLevel;
import org.apache.camel.Processor;
+import org.apache.camel.ResolveEndpointFailedException;
import org.apache.camel.impl.UriEndpointComponent;
import org.apache.camel.processor.CamelLogProcessor;
import org.apache.camel.processor.DefaultExchangeFormatter;
import org.apache.camel.processor.ThroughputLogger;
import org.apache.camel.spi.ExchangeFormatter;
+import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.CamelLogger;
import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* The <a href="http://camel.apache.org/log.html">Log Component</a>
@@ -37,22 +40,32 @@ import org.slf4j.Logger;
* @version
*/
public class LogComponent extends UriEndpointComponent {
+ private static final Logger LOG = LoggerFactory.getLogger(LogComponent.class);
private ExchangeFormatter exchangeFormatter;
public LogComponent() {
super(LogEndpoint.class);
}
-
+
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
LoggingLevel level = getLoggingLevel(parameters);
Logger providedLogger = getLogger(parameters);
+ if (providedLogger == null) {
+ // try to look up the logger in registry
+ Map<String, Logger> availableLoggers = getCamelContext().getRegistry().findByTypeWithName(Logger.class);
+ if (availableLoggers.size() == 1) {
+ providedLogger = availableLoggers.values().iterator().next();
+ } else if (availableLoggers.size() > 1) {
+ LOG.info("More than one {} instance found in the registry. Falling back to creating logger from URI {}.", Logger.class.getName(), uri);
+ }
+ }
LogEndpoint endpoint = new LogEndpoint(uri, this);
endpoint.setLevel(level.name());
setProperties(endpoint, parameters);
- CamelLogger camelLogger = null;
+ CamelLogger camelLogger = null;
if (providedLogger == null) {
camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
} else {
@@ -66,7 +79,7 @@ public class LogComponent extends UriEndpointComponent {
Long groupDelay = endpoint.getGroupDelay();
logger = new ThroughputLogger(camelLogger, this.getCamelContext(), endpoint.getGroupInterval(), groupDelay, groupActiveOnly);
} else {
- // first, try to use the user-specified formatter (or the one picked up from the Registry and transferred to
+ // first, try to use the user-specified formatter (or the one picked up from the Registry and transferred to
// the property by a previous endpoint initialisation); if null, try to pick it up from the Registry now
ExchangeFormatter localFormatter = exchangeFormatter;
if (localFormatter == null) {
http://git-wip-us.apache.org/repos/asf/camel/blob/426fa8e3/camel-core/src/test/java/org/apache/camel/component/log/LogCustomLoggerTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomLoggerTest.java b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomLoggerTest.java
new file mode 100644
index 0000000..7114f53
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomLoggerTest.java
@@ -0,0 +1,147 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.impl.PropertyPlaceholderDelegateRegistry;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.log4j.*;
+import org.apache.log4j.spi.LoggingEvent;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+
+import java.io.StringWriter;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Custom Logger test.
+ */
+public class LogCustomLoggerTest extends ContextTestSupport {
+
+ // to capture the logs
+ private static StringWriter sw1;
+ // to capture the warnings from LogComponent
+ private static StringWriter sw2;
+
+ private static class CapturingAppender extends AppenderSkeleton {
+ private StringWriter sw;
+
+ private CapturingAppender(StringWriter sw) {
+ this.sw = sw;
+ }
+
+ @Override
+ protected void append(LoggingEvent event) {
+ this.sw.append(event.getLoggerName());
+ }
+
+ @Override
+ public void close() {
+ }
+
+ @Override
+ public boolean requiresLayout() {
+ return false;
+ }
+ }
+
+ @Before @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ sw1 = new StringWriter();
+ sw2 = new StringWriter();
+ Logger.getLogger(LogCustomLoggerTest.class).removeAllAppenders();
+ Logger.getLogger(LogCustomLoggerTest.class).addAppender(new CapturingAppender(sw1));
+ Logger.getLogger(LogCustomLoggerTest.class).setLevel(Level.TRACE);
+ Logger.getLogger("provided.logger1.name").removeAllAppenders();
+ Logger.getLogger("provided.logger1.name").addAppender(new CapturingAppender(sw1));
+ Logger.getLogger("provided.logger1.name").setLevel(Level.TRACE);
+ Logger.getLogger("provided.logger2.name").removeAllAppenders();
+ Logger.getLogger("provided.logger2.name").addAppender(new CapturingAppender(sw1));
+ Logger.getLogger("provided.logger2.name").setLevel(Level.TRACE);
+ Logger.getLogger("irrelevant.logger.name").removeAllAppenders();
+ Logger.getLogger("irrelevant.logger.name").addAppender(new CapturingAppender(sw1));
+ Logger.getLogger("irrelevant.logger.name").setLevel(Level.TRACE);
+ Logger.getLogger(LogComponent.class).removeAllAppenders();
+ Logger.getLogger(LogComponent.class).addAppender(new CapturingAppender(sw2));
+ Logger.getLogger(LogComponent.class).setLevel(Level.TRACE);
+ }
+
+ @Test
+ public void testFallbackLogger() throws Exception {
+ String endpointUri = "log:" + LogCustomLoggerTest.class.getCanonicalName();
+ template.requestBody(endpointUri, "hello");
+ assertThat(sw1.toString(), equalTo(LogCustomLoggerTest.class.getCanonicalName()));
+ }
+
+ @Test
+ public void testEndpointURIParametrizedLogger() throws Exception {
+ getRegistry().put("logger1", LoggerFactory.getLogger("provided.logger1.name"));
+ getRegistry().put("logger2", LoggerFactory.getLogger("provided.logger2.name"));
+ template.requestBody("log:irrelevant.logger.name?logger=#logger2", "hello");
+ assertThat(sw1.toString(), equalTo("provided.logger2.name"));
+ }
+
+ @Test
+ public void testEndpointURIParametrizedNotResolvableLogger() {
+ getRegistry().put("logger1", LoggerFactory.getLogger("provided.logger1.name"));
+ try {
+ template.requestBody("log:irrelevant.logger.name?logger=#logger2", "hello");
+ } catch (ResolveEndpointFailedException e) {
+ // expected
+ }
+ }
+
+ @Test
+ public void testDefaultRegistryLogger() throws Exception {
+ getRegistry().put("logger", LoggerFactory.getLogger("provided.logger1.name"));
+ template.requestBody("log:irrelevant.logger.name", "hello");
+ assertThat(sw1.toString(), equalTo("provided.logger1.name"));
+ }
+
+ @Test
+ public void testTwoRegistryLoggers() throws Exception {
+ getRegistry().put("logger1", LoggerFactory.getLogger("provided.logger1.name"));
+ getRegistry().put("logger2", LoggerFactory.getLogger("provided.logger2.name"));
+ template.requestBody("log:irrelevant.logger.name", "hello");
+ assertThat(sw1.toString(), equalTo("irrelevant.logger.name"));
+ assertThat(sw2.toString(), equalTo(LogComponent.class.getName()));
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ return new DefaultCamelContext(new SimpleRegistry());
+ }
+
+ private SimpleRegistry getRegistry() {
+ SimpleRegistry registry = null;
+ if (context.getRegistry() instanceof PropertyPlaceholderDelegateRegistry) {
+ registry = (SimpleRegistry) ((PropertyPlaceholderDelegateRegistry) context.getRegistry()).getRegistry();
+ } else {
+ fail("Could not determine Registry type");
+ }
+ return registry;
+ }
+
+}