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 2013/08/31 14:28:14 UTC

[1/3] git commit: CAMEL-6466: Allow configuring custom log formatter from uri parameters.

Updated Branches:
  refs/heads/camel-2.11.x f4fdeb1aa -> d83f6eec9
  refs/heads/camel-2.12.x 1b911be5c -> ffe417448
  refs/heads/master 9eeeac008 -> 81377b0f8


CAMEL-6466: Allow configuring custom log formatter from uri parameters.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/81377b0f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/81377b0f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/81377b0f

Branch: refs/heads/master
Commit: 81377b0f8aa345b24971fa1d0acdca347625dc59
Parents: 9eeeac0
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Aug 31 13:58:02 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Aug 31 13:58:02 2013 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       | 34 ++++++------
 .../component/log/LogCustomFormatterTest.java   | 55 +++++++++++++++++++-
 2 files changed, 69 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/81377b0f/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 4325114..308b7f4 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
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.log;
 
-import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
@@ -41,28 +40,30 @@ public class LogComponent extends DefaultComponent {
     private ExchangeFormatter exchangeFormatter;
     
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        Map<String, Object> originalParameters = new HashMap<String, Object>(parameters);
-
         LoggingLevel level = getLoggingLevel(parameters);
-        String marker = getAndRemoveParameter(parameters, "marker", String.class);
-        Integer groupSize = getAndRemoveParameter(parameters, "groupSize", Integer.class);
-        Long groupInterval = getAndRemoveParameter(parameters, "groupInterval", Long.class);
 
-        CamelLogger camelLogger = new CamelLogger(remaining, level, marker);
+        LogEndpoint endpoint = new LogEndpoint(uri, this);
+        endpoint.setLevel(level.name());
+        setProperties(endpoint, parameters);
+
+        CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
         Processor logger;
-        if (groupSize != null) {
-            logger = new ThroughputLogger(camelLogger, groupSize);
-        } else if (groupInterval != null) {
-            Boolean groupActiveOnly = getAndRemoveParameter(parameters, "groupActiveOnly", Boolean.class, Boolean.TRUE);
-            Long groupDelay = getAndRemoveParameter(parameters, "groupDelay", Long.class);
-            logger = new ThroughputLogger(camelLogger, this.getCamelContext(), groupInterval, groupDelay, groupActiveOnly);
+        if (endpoint.getGroupSize() != null) {
+            logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize());
+        } else if (endpoint.getGroupInterval() != null) {
+            Boolean groupActiveOnly = endpoint.getGroupActiveOnly() != null ? endpoint.getGroupActiveOnly() : Boolean.TRUE;
+            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 
             // the property by a previous endpoint initialisation); if null, try to pick it up from the Registry now
             ExchangeFormatter localFormatter = exchangeFormatter;
             if (localFormatter == null) {
                 localFormatter = getCamelContext().getRegistry().lookupByNameAndType("logFormatter", ExchangeFormatter.class);
-                exchangeFormatter = localFormatter;
+                if (localFormatter != null) {
+                    exchangeFormatter = localFormatter;
+                    setProperties(exchangeFormatter, parameters);
+                }
             }
             // if no formatter is available in the Registry, create a local one of the default type, for a single use
             if (localFormatter == null) {
@@ -72,9 +73,7 @@ public class LogComponent extends DefaultComponent {
             logger = new CamelLogProcessor(camelLogger, localFormatter);
         }
 
-        LogEndpoint endpoint = new LogEndpoint(uri, this, logger);
-        // we want the endpoint to have the all the options configured from the original parameters
-        setProperties(endpoint, originalParameters);
+        endpoint.setLogger(logger);
         return endpoint;
     }
 
@@ -94,7 +93,6 @@ public class LogComponent extends DefaultComponent {
      * Sets a custom {@link ExchangeFormatter} to convert the Exchange to a String suitable for logging.
      * <p />
      * If not specified, we default to {@link DefaultExchangeFormatter}.
-     * @param exchangeFormatter
      */
     public void setExchangeFormatter(ExchangeFormatter exchangeFormatter) {
         this.exchangeFormatter = exchangeFormatter;

http://git-wip-us.apache.org/repos/asf/camel/blob/81377b0f/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
index be25920..59047ef 100644
--- a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
@@ -16,8 +16,10 @@
  */
 package org.apache.camel.component.log;
 
+import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.impl.PropertyPlaceholderDelegateRegistry;
 import org.apache.camel.spi.ExchangeFormatter;
@@ -85,6 +87,47 @@ public class LogCustomFormatterTest extends ContextTestSupport {
     }
 
     @Test
+    public void testCustomFormatterInRegistryOptions() throws Exception {
+        context.stop();
+
+        exchangeFormatter = new TestExchangeFormatter();
+        JndiRegistry registry = getRegistryAsJndi();
+        registry.bind("logFormatter", exchangeFormatter);
+        assertEquals("", exchangeFormatter.getPrefix());
+
+        context.start();
+
+        String endpointUri = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo";
+        template.requestBody(endpointUri, "Hello World");
+        template.requestBody(endpointUri, "Hello World");
+
+        assertEquals(2, exchangeFormatter.getCounter());
+        assertEquals("foo", exchangeFormatter.getPrefix());
+    }
+
+    @Test
+    public void testCustomFormatterInRegistryUnknownOption() throws Exception {
+        context.stop();
+
+        exchangeFormatter = new TestExchangeFormatter();
+        JndiRegistry registry = getRegistryAsJndi();
+        registry.bind("logFormatter", exchangeFormatter);
+        assertEquals("", exchangeFormatter.getPrefix());
+
+        context.start();
+
+        // unknown parameter
+        try {
+            String endpointUri2 = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo&bar=no";
+            template.requestBody(endpointUri2, "Hello World");
+            fail("Should have thrown exception");
+        } catch (Exception e) {
+            ResolveEndpointFailedException cause = assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause());
+            assertTrue(cause.getMessage().endsWith("Unknown parameters=[{bar=no}]"));
+        }
+    }
+
+    @Test
     public void testFormatterNotPickedUpWithDifferentKey() throws Exception {
         context.stop();
         
@@ -118,11 +161,12 @@ public class LogCustomFormatterTest extends ContextTestSupport {
     public static class TestExchangeFormatter implements ExchangeFormatter {
         private int counter;
         private boolean addTen;
+        private String prefix = "";
         
         @Override
         public String format(Exchange exchange) {
             counter += addTen ? 10 : 1;
-            return exchange.toString();
+            return prefix + exchange.toString();
         }
         
         public int getCounter() {
@@ -136,7 +180,14 @@ public class LogCustomFormatterTest extends ContextTestSupport {
         public void setAddTen(boolean addTen) {
             this.addTen = addTen;
         }
-        
+
+        public String getPrefix() {
+            return prefix;
+        }
+
+        public void setPrefix(String prefix) {
+            this.prefix = prefix;
+        }
     }
     
 }


[3/3] git commit: CAMEL-6466: Allow configuring custom log formatter from uri parameters.

Posted by da...@apache.org.
CAMEL-6466: Allow configuring custom log formatter from uri parameters.

Conflicts:
	camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d83f6eec
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d83f6eec
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d83f6eec

Branch: refs/heads/camel-2.11.x
Commit: d83f6eec9b3113319dc9be5e99dc0ca787df7cea
Parents: f4fdeb1
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Aug 31 13:58:02 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Aug 31 14:27:54 2013 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       | 32 +++++------
 .../apache/camel/component/log/LogEndpoint.java | 57 +++++++++++++++++++-
 .../component/log/LogCustomFormatterTest.java   | 55 ++++++++++++++++++-
 3 files changed, 126 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d83f6eec/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 2828d29..cd81cfe 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
@@ -40,25 +40,29 @@ public class LogComponent extends DefaultComponent {
     
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         LoggingLevel level = getLoggingLevel(parameters);
-        String marker = getAndRemoveParameter(parameters, "marker", String.class);
-        Integer groupSize = getAndRemoveParameter(parameters, "groupSize", Integer.class);
-        Long groupInterval = getAndRemoveParameter(parameters, "groupInterval", Long.class);
 
-        CamelLogger camelLogger = new CamelLogger(remaining, level, marker);
+        LogEndpoint endpoint = new LogEndpoint(uri, this);
+        endpoint.setLevel(level.name());
+        setProperties(endpoint, parameters);
+
+        CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
         Processor logger;
-        if (groupSize != null) {
-            logger = new ThroughputLogger(camelLogger, groupSize);
-        } else if (groupInterval != null) {
-            Boolean groupActiveOnly = getAndRemoveParameter(parameters, "groupActiveOnly", Boolean.class, Boolean.TRUE);
-            Long groupDelay = getAndRemoveParameter(parameters, "groupDelay", Long.class);
-            logger = new ThroughputLogger(camelLogger, this.getCamelContext(), groupInterval, groupDelay, groupActiveOnly);
+        if (endpoint.getGroupSize() != null) {
+            logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize());
+        } else if (endpoint.getGroupInterval() != null) {
+            Boolean groupActiveOnly = endpoint.getGroupActiveOnly() != null ? endpoint.getGroupActiveOnly() : Boolean.TRUE;
+            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 
             // the property by a previous endpoint initialisation); if null, try to pick it up from the Registry now
             ExchangeFormatter localFormatter = exchangeFormatter;
             if (localFormatter == null) {
                 localFormatter = getCamelContext().getRegistry().lookupByNameAndType("logFormatter", ExchangeFormatter.class);
-                exchangeFormatter = localFormatter;
+                if (localFormatter != null) {
+                    exchangeFormatter = localFormatter;
+                    setProperties(exchangeFormatter, parameters);
+                }
             }
             // if no formatter is available in the Registry, create a local one of the default type, for a single use
             if (localFormatter == null) {
@@ -68,9 +72,8 @@ public class LogComponent extends DefaultComponent {
             logger = new CamelLogProcessor(camelLogger, localFormatter);
         }
 
-        LogEndpoint endpoint = new LogEndpoint(uri, this);
-        setProperties(endpoint, parameters);
-        return new LogEndpoint(uri, this, logger);
+        endpoint.setLogger(logger);
+        return endpoint;
     }
 
     /**
@@ -89,7 +92,6 @@ public class LogComponent extends DefaultComponent {
      * Sets a custom {@link ExchangeFormatter} to convert the Exchange to a String suitable for logging.
      * <p />
      * If not specified, we default to {@link LogFormatter}.
-     * @param exchangeFormatter
      */
     public void setExchangeFormatter(ExchangeFormatter exchangeFormatter) {
         this.exchangeFormatter = exchangeFormatter;

http://git-wip-us.apache.org/repos/asf/camel/blob/d83f6eec/camel-core/src/main/java/org/apache/camel/component/log/LogEndpoint.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/log/LogEndpoint.java b/camel-core/src/main/java/org/apache/camel/component/log/LogEndpoint.java
index 74a826e..9cbfffd 100644
--- a/camel-core/src/main/java/org/apache/camel/component/log/LogEndpoint.java
+++ b/camel-core/src/main/java/org/apache/camel/component/log/LogEndpoint.java
@@ -27,7 +27,14 @@ import org.apache.camel.util.ServiceHelper;
  */
 public class LogEndpoint extends ProcessorEndpoint {
 
-    private Processor logger;
+    private volatile Processor logger;
+
+    private String level;
+    private String marker;
+    private Integer groupSize;
+    private Long groupInterval;
+    private Boolean groupActiveOnly;
+    private Long groupDelay;
 
     public LogEndpoint() {
     }
@@ -70,4 +77,52 @@ public class LogEndpoint extends ProcessorEndpoint {
     protected String createEndpointUri() {
         return "log:" + logger.toString();
     }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public String getMarker() {
+        return marker;
+    }
+
+    public void setMarker(String marker) {
+        this.marker = marker;
+    }
+
+    public Integer getGroupSize() {
+        return groupSize;
+    }
+
+    public void setGroupSize(Integer groupSize) {
+        this.groupSize = groupSize;
+    }
+
+    public Long getGroupInterval() {
+        return groupInterval;
+    }
+
+    public void setGroupInterval(Long groupInterval) {
+        this.groupInterval = groupInterval;
+    }
+
+    public Boolean getGroupActiveOnly() {
+        return groupActiveOnly;
+    }
+
+    public void setGroupActiveOnly(Boolean groupActiveOnly) {
+        this.groupActiveOnly = groupActiveOnly;
+    }
+
+    public Long getGroupDelay() {
+        return groupDelay;
+    }
+
+    public void setGroupDelay(Long groupDelay) {
+        this.groupDelay = groupDelay;
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/d83f6eec/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
index be25920..59047ef 100644
--- a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
@@ -16,8 +16,10 @@
  */
 package org.apache.camel.component.log;
 
+import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.impl.PropertyPlaceholderDelegateRegistry;
 import org.apache.camel.spi.ExchangeFormatter;
@@ -85,6 +87,47 @@ public class LogCustomFormatterTest extends ContextTestSupport {
     }
 
     @Test
+    public void testCustomFormatterInRegistryOptions() throws Exception {
+        context.stop();
+
+        exchangeFormatter = new TestExchangeFormatter();
+        JndiRegistry registry = getRegistryAsJndi();
+        registry.bind("logFormatter", exchangeFormatter);
+        assertEquals("", exchangeFormatter.getPrefix());
+
+        context.start();
+
+        String endpointUri = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo";
+        template.requestBody(endpointUri, "Hello World");
+        template.requestBody(endpointUri, "Hello World");
+
+        assertEquals(2, exchangeFormatter.getCounter());
+        assertEquals("foo", exchangeFormatter.getPrefix());
+    }
+
+    @Test
+    public void testCustomFormatterInRegistryUnknownOption() throws Exception {
+        context.stop();
+
+        exchangeFormatter = new TestExchangeFormatter();
+        JndiRegistry registry = getRegistryAsJndi();
+        registry.bind("logFormatter", exchangeFormatter);
+        assertEquals("", exchangeFormatter.getPrefix());
+
+        context.start();
+
+        // unknown parameter
+        try {
+            String endpointUri2 = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo&bar=no";
+            template.requestBody(endpointUri2, "Hello World");
+            fail("Should have thrown exception");
+        } catch (Exception e) {
+            ResolveEndpointFailedException cause = assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause());
+            assertTrue(cause.getMessage().endsWith("Unknown parameters=[{bar=no}]"));
+        }
+    }
+
+    @Test
     public void testFormatterNotPickedUpWithDifferentKey() throws Exception {
         context.stop();
         
@@ -118,11 +161,12 @@ public class LogCustomFormatterTest extends ContextTestSupport {
     public static class TestExchangeFormatter implements ExchangeFormatter {
         private int counter;
         private boolean addTen;
+        private String prefix = "";
         
         @Override
         public String format(Exchange exchange) {
             counter += addTen ? 10 : 1;
-            return exchange.toString();
+            return prefix + exchange.toString();
         }
         
         public int getCounter() {
@@ -136,7 +180,14 @@ public class LogCustomFormatterTest extends ContextTestSupport {
         public void setAddTen(boolean addTen) {
             this.addTen = addTen;
         }
-        
+
+        public String getPrefix() {
+            return prefix;
+        }
+
+        public void setPrefix(String prefix) {
+            this.prefix = prefix;
+        }
     }
     
 }


[2/3] git commit: CAMEL-6466: Allow configuring custom log formatter from uri parameters.

Posted by da...@apache.org.
CAMEL-6466: Allow configuring custom log formatter from uri parameters.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ffe41744
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ffe41744
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ffe41744

Branch: refs/heads/camel-2.12.x
Commit: ffe41744855a609c9779a6763b9a0ec1bfecb837
Parents: 1b911be
Author: Claus Ibsen <da...@apache.org>
Authored: Sat Aug 31 13:58:02 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat Aug 31 14:24:47 2013 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       | 34 ++++++------
 .../component/log/LogCustomFormatterTest.java   | 55 +++++++++++++++++++-
 2 files changed, 69 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ffe41744/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 4325114..308b7f4 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
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.log;
 
-import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
 
@@ -41,28 +40,30 @@ public class LogComponent extends DefaultComponent {
     private ExchangeFormatter exchangeFormatter;
     
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        Map<String, Object> originalParameters = new HashMap<String, Object>(parameters);
-
         LoggingLevel level = getLoggingLevel(parameters);
-        String marker = getAndRemoveParameter(parameters, "marker", String.class);
-        Integer groupSize = getAndRemoveParameter(parameters, "groupSize", Integer.class);
-        Long groupInterval = getAndRemoveParameter(parameters, "groupInterval", Long.class);
 
-        CamelLogger camelLogger = new CamelLogger(remaining, level, marker);
+        LogEndpoint endpoint = new LogEndpoint(uri, this);
+        endpoint.setLevel(level.name());
+        setProperties(endpoint, parameters);
+
+        CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
         Processor logger;
-        if (groupSize != null) {
-            logger = new ThroughputLogger(camelLogger, groupSize);
-        } else if (groupInterval != null) {
-            Boolean groupActiveOnly = getAndRemoveParameter(parameters, "groupActiveOnly", Boolean.class, Boolean.TRUE);
-            Long groupDelay = getAndRemoveParameter(parameters, "groupDelay", Long.class);
-            logger = new ThroughputLogger(camelLogger, this.getCamelContext(), groupInterval, groupDelay, groupActiveOnly);
+        if (endpoint.getGroupSize() != null) {
+            logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize());
+        } else if (endpoint.getGroupInterval() != null) {
+            Boolean groupActiveOnly = endpoint.getGroupActiveOnly() != null ? endpoint.getGroupActiveOnly() : Boolean.TRUE;
+            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 
             // the property by a previous endpoint initialisation); if null, try to pick it up from the Registry now
             ExchangeFormatter localFormatter = exchangeFormatter;
             if (localFormatter == null) {
                 localFormatter = getCamelContext().getRegistry().lookupByNameAndType("logFormatter", ExchangeFormatter.class);
-                exchangeFormatter = localFormatter;
+                if (localFormatter != null) {
+                    exchangeFormatter = localFormatter;
+                    setProperties(exchangeFormatter, parameters);
+                }
             }
             // if no formatter is available in the Registry, create a local one of the default type, for a single use
             if (localFormatter == null) {
@@ -72,9 +73,7 @@ public class LogComponent extends DefaultComponent {
             logger = new CamelLogProcessor(camelLogger, localFormatter);
         }
 
-        LogEndpoint endpoint = new LogEndpoint(uri, this, logger);
-        // we want the endpoint to have the all the options configured from the original parameters
-        setProperties(endpoint, originalParameters);
+        endpoint.setLogger(logger);
         return endpoint;
     }
 
@@ -94,7 +93,6 @@ public class LogComponent extends DefaultComponent {
      * Sets a custom {@link ExchangeFormatter} to convert the Exchange to a String suitable for logging.
      * <p />
      * If not specified, we default to {@link DefaultExchangeFormatter}.
-     * @param exchangeFormatter
      */
     public void setExchangeFormatter(ExchangeFormatter exchangeFormatter) {
         this.exchangeFormatter = exchangeFormatter;

http://git-wip-us.apache.org/repos/asf/camel/blob/ffe41744/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
index be25920..59047ef 100644
--- a/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/log/LogCustomFormatterTest.java
@@ -16,8 +16,10 @@
  */
 package org.apache.camel.component.log;
 
+import org.apache.camel.CamelExecutionException;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
+import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.impl.PropertyPlaceholderDelegateRegistry;
 import org.apache.camel.spi.ExchangeFormatter;
@@ -85,6 +87,47 @@ public class LogCustomFormatterTest extends ContextTestSupport {
     }
 
     @Test
+    public void testCustomFormatterInRegistryOptions() throws Exception {
+        context.stop();
+
+        exchangeFormatter = new TestExchangeFormatter();
+        JndiRegistry registry = getRegistryAsJndi();
+        registry.bind("logFormatter", exchangeFormatter);
+        assertEquals("", exchangeFormatter.getPrefix());
+
+        context.start();
+
+        String endpointUri = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo";
+        template.requestBody(endpointUri, "Hello World");
+        template.requestBody(endpointUri, "Hello World");
+
+        assertEquals(2, exchangeFormatter.getCounter());
+        assertEquals("foo", exchangeFormatter.getPrefix());
+    }
+
+    @Test
+    public void testCustomFormatterInRegistryUnknownOption() throws Exception {
+        context.stop();
+
+        exchangeFormatter = new TestExchangeFormatter();
+        JndiRegistry registry = getRegistryAsJndi();
+        registry.bind("logFormatter", exchangeFormatter);
+        assertEquals("", exchangeFormatter.getPrefix());
+
+        context.start();
+
+        // unknown parameter
+        try {
+            String endpointUri2 = "log:" + LogCustomFormatterTest.class.getCanonicalName() + "?prefix=foo&bar=no";
+            template.requestBody(endpointUri2, "Hello World");
+            fail("Should have thrown exception");
+        } catch (Exception e) {
+            ResolveEndpointFailedException cause = assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause());
+            assertTrue(cause.getMessage().endsWith("Unknown parameters=[{bar=no}]"));
+        }
+    }
+
+    @Test
     public void testFormatterNotPickedUpWithDifferentKey() throws Exception {
         context.stop();
         
@@ -118,11 +161,12 @@ public class LogCustomFormatterTest extends ContextTestSupport {
     public static class TestExchangeFormatter implements ExchangeFormatter {
         private int counter;
         private boolean addTen;
+        private String prefix = "";
         
         @Override
         public String format(Exchange exchange) {
             counter += addTen ? 10 : 1;
-            return exchange.toString();
+            return prefix + exchange.toString();
         }
         
         public int getCounter() {
@@ -136,7 +180,14 @@ public class LogCustomFormatterTest extends ContextTestSupport {
         public void setAddTen(boolean addTen) {
             this.addTen = addTen;
         }
-        
+
+        public String getPrefix() {
+            return prefix;
+        }
+
+        public void setPrefix(String prefix) {
+            this.prefix = prefix;
+        }
     }
     
 }