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:46 UTC

[01/13] git commit: [CAMEL-6694] Allow user to pass logger instance in camel-log endpoint URI

Repository: camel
Updated Branches:
  refs/heads/camel-2.12.x 773e5dab8 -> c8b677e86
  refs/heads/camel-2.13.x 923cdb1e9 -> 653f8d6f2
  refs/heads/master 5f6477c6f -> fc91c5883


[CAMEL-6694] Allow user to pass logger instance in camel-log endpoint
URI

The URI has form: log:logger-name?level=info&logger=#mylogger

"mylogger" is registered in context's registry

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

Branch: refs/heads/master
Commit: d09cfdd5d273804b2a65ee83ec70175abd371a93
Parents: 21123a1
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Tue Apr 1 12:06:36 2014 +0200
Committer: Grzegorz Grzybek <gr...@gmail.com>
Committed: Thu Apr 3 10:39:15 2014 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       | 20 +++++++-
 .../camel/itest/osgi/core/log/LogRouteTest.java | 48 +++++++++++++++++++-
 .../src/test/resources/log4j.properties         | 13 ++++++
 3 files changed, 79 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d09cfdd5/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 250d745..b3dc3a7 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
@@ -28,6 +28,7 @@ import org.apache.camel.processor.DefaultExchangeFormatter;
 import org.apache.camel.processor.ThroughputLogger;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.util.CamelLogger;
+import org.slf4j.Logger;
 
 /**
  * The <a href="http://camel.apache.org/log.html">Log Component</a>
@@ -45,12 +46,18 @@ public class LogComponent extends UriEndpointComponent {
     
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         LoggingLevel level = getLoggingLevel(parameters);
+        Logger providedLogger = getLogger(parameters);
 
         LogEndpoint endpoint = new LogEndpoint(uri, this);
         endpoint.setLevel(level.name());
         setProperties(endpoint, parameters);
 
-        CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
+        CamelLogger camelLogger = null; 
+        if (providedLogger == null) {
+            camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
+        } else {
+            camelLogger = new CamelLogger(providedLogger, level, endpoint.getMarker());
+        }
         Processor logger;
         if (endpoint.getGroupSize() != null) {
             logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize());
@@ -89,6 +96,17 @@ public class LogComponent extends UriEndpointComponent {
         return LoggingLevel.valueOf(levelText.toUpperCase(Locale.ENGLISH));
     }
 
+    /**
+     * Gets optional {@link Logger} instance from parameters. If non-null, the provided instance will be used as
+     * {@link Logger} in {@link CamelLogger}
+     * 
+     * @param parameters
+     * @return
+     */
+    protected Logger getLogger(Map<String, Object> parameters) {
+        return getAndRemoveOrResolveReferenceParameter(parameters, "logger", Logger.class);
+    }
+
     public ExchangeFormatter getExchangeFormatter() {
         return exchangeFormatter;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/d09cfdd5/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
index 09e4ebc..e7faed4 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
@@ -16,10 +16,21 @@
  */
 package org.apache.camel.itest.osgi.core.log;
 
+import java.io.File;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import static org.ops4j.pax.exam.OptionUtils.*;
 
 @RunWith(JUnit4TestRunner.class)
 public class LogRouteTest extends OSGiIntegrationTestSupport {
@@ -40,6 +51,14 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     }
 
     @Test
+    public void testSendMessageToInfoLogWithSiftLogging() throws Exception {
+        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=debug&logger=#mylogger", "<level>DEBUG</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=error&logger=#mylogger", "<level>ERROR</level>");
+    }
+
+    @Test
     public void testSendMessageToBadLevel() throws Exception {
         try {
             template.sendBody("log:org.apache.camel.TEST?level=noSuchLevel", "<level>noSuchLevel</level>");
@@ -53,6 +72,33 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     public boolean isUseRouteBuilder() {
         return false;
     }
-   
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+        registry.bind("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
+        return registry;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        Option[] options = combine(
+            getDefaultCamelKarafOptions(),
+            new Option[] {
+                new DoNotModifyLogOption(),
+                new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties")),
+//                KarafDistributionOption.debugConfiguration("9999", true)
+            });
+        return options;
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/d09cfdd5/tests/camel-itest-osgi/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/resources/log4j.properties b/tests/camel-itest-osgi/src/test/resources/log4j.properties
index dbf1670..2b05265 100644
--- a/tests/camel-itest-osgi/src/test/resources/log4j.properties
+++ b/tests/camel-itest-osgi/src/test/resources/log4j.properties
@@ -29,6 +29,9 @@ log4j.logger.org.apache.activemq.spring=WARN
 # is very noisy at INFO level
 log4j.logger.org.ops4j.io=WARN
 
+# sift test
+log4j.logger.org.apache.camel.SIFT=DEBUG, sift
+
 # CONSOLE appender not used by default
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
@@ -40,3 +43,13 @@ log4j.appender.out.layout=org.apache.log4j.PatternLayout
 log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
 log4j.appender.out.file=target/camel-itest-osgi-test.log
 log4j.appender.out.append=true
+
+# Sift appender
+log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
+log4j.appender.sift.key=bundle.name
+log4j.appender.sift.default=karaf
+log4j.appender.sift.appender=org.apache.log4j.FileAppender
+log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
+log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | id=%X{camel.exchangeId} | %X{bundle.name} | %-5.5p |  %-32.32C %4L | %m%n
+log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log
+log4j.appender.sift.appender.append=true


[09/13] git commit: CAMEL-6694: Fixed CS

Posted by da...@apache.org.
CAMEL-6694: Fixed CS


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

Branch: refs/heads/camel-2.13.x
Commit: 653f8d6f27c056631e76d8aa3f40199a522dbb71
Parents: 0f5db8c
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Apr 4 08:38:19 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:39:19 2014 +0200

----------------------------------------------------------------------
 .../apache/camel/component/log/LogCustomLoggerTest.java  | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/653f8d6f/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
index 7114f53..908b8c8 100644
--- 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
@@ -16,21 +16,22 @@
  */
 package org.apache.camel.component.log;
 
+import java.io.StringWriter;
+
 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.AppenderSkeleton;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
 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;
 
@@ -44,7 +45,7 @@ public class LogCustomLoggerTest extends ContextTestSupport {
     // to capture the warnings from LogComponent
     private static StringWriter sw2;
 
-    private static class CapturingAppender extends AppenderSkeleton {
+    private static final class CapturingAppender extends AppenderSkeleton {
         private StringWriter sw;
 
         private CapturingAppender(StringWriter sw) {


[13/13] git commit: CAMEL-6694: Fixed CS

Posted by da...@apache.org.
CAMEL-6694: Fixed CS


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

Branch: refs/heads/camel-2.12.x
Commit: c8b677e86381cd738184a19af79003dca73b51f5
Parents: b79265f
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Apr 4 08:38:19 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:40:13 2014 +0200

----------------------------------------------------------------------
 .../apache/camel/component/log/LogCustomLoggerTest.java  | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c8b677e8/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
index 7114f53..908b8c8 100644
--- 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
@@ -16,21 +16,22 @@
  */
 package org.apache.camel.component.log;
 
+import java.io.StringWriter;
+
 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.AppenderSkeleton;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
 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;
 
@@ -44,7 +45,7 @@ public class LogCustomLoggerTest extends ContextTestSupport {
     // to capture the warnings from LogComponent
     private static StringWriter sw2;
 
-    private static class CapturingAppender extends AppenderSkeleton {
+    private static final class CapturingAppender extends AppenderSkeleton {
         private StringWriter sw;
 
         private CapturingAppender(StringWriter sw) {


[06/13] git commit: [CAMEL-6694] Allow user to pass logger instance in camel-log endpoint URI

Posted by da...@apache.org.
[CAMEL-6694] Allow user to pass logger instance in camel-log endpoint
URI

The URI has form: log:logger-name?level=info&logger=#mylogger

"mylogger" is registered in context's registry


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

Branch: refs/heads/camel-2.13.x
Commit: fe8360f38fb9b99fbce02a0a6ad150ac7d9ae133
Parents: 923cdb1
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Tue Apr 1 12:06:36 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:38:55 2014 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       | 20 +++++++-
 .../camel/itest/osgi/core/log/LogRouteTest.java | 48 +++++++++++++++++++-
 .../src/test/resources/log4j.properties         | 13 ++++++
 3 files changed, 79 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/fe8360f3/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 250d745..b3dc3a7 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
@@ -28,6 +28,7 @@ import org.apache.camel.processor.DefaultExchangeFormatter;
 import org.apache.camel.processor.ThroughputLogger;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.util.CamelLogger;
+import org.slf4j.Logger;
 
 /**
  * The <a href="http://camel.apache.org/log.html">Log Component</a>
@@ -45,12 +46,18 @@ public class LogComponent extends UriEndpointComponent {
     
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         LoggingLevel level = getLoggingLevel(parameters);
+        Logger providedLogger = getLogger(parameters);
 
         LogEndpoint endpoint = new LogEndpoint(uri, this);
         endpoint.setLevel(level.name());
         setProperties(endpoint, parameters);
 
-        CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
+        CamelLogger camelLogger = null; 
+        if (providedLogger == null) {
+            camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
+        } else {
+            camelLogger = new CamelLogger(providedLogger, level, endpoint.getMarker());
+        }
         Processor logger;
         if (endpoint.getGroupSize() != null) {
             logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize());
@@ -89,6 +96,17 @@ public class LogComponent extends UriEndpointComponent {
         return LoggingLevel.valueOf(levelText.toUpperCase(Locale.ENGLISH));
     }
 
+    /**
+     * Gets optional {@link Logger} instance from parameters. If non-null, the provided instance will be used as
+     * {@link Logger} in {@link CamelLogger}
+     * 
+     * @param parameters
+     * @return
+     */
+    protected Logger getLogger(Map<String, Object> parameters) {
+        return getAndRemoveOrResolveReferenceParameter(parameters, "logger", Logger.class);
+    }
+
     public ExchangeFormatter getExchangeFormatter() {
         return exchangeFormatter;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/fe8360f3/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
index 09e4ebc..e7faed4 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
@@ -16,10 +16,21 @@
  */
 package org.apache.camel.itest.osgi.core.log;
 
+import java.io.File;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import static org.ops4j.pax.exam.OptionUtils.*;
 
 @RunWith(JUnit4TestRunner.class)
 public class LogRouteTest extends OSGiIntegrationTestSupport {
@@ -40,6 +51,14 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     }
 
     @Test
+    public void testSendMessageToInfoLogWithSiftLogging() throws Exception {
+        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=debug&logger=#mylogger", "<level>DEBUG</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=error&logger=#mylogger", "<level>ERROR</level>");
+    }
+
+    @Test
     public void testSendMessageToBadLevel() throws Exception {
         try {
             template.sendBody("log:org.apache.camel.TEST?level=noSuchLevel", "<level>noSuchLevel</level>");
@@ -53,6 +72,33 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     public boolean isUseRouteBuilder() {
         return false;
     }
-   
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+        registry.bind("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
+        return registry;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        Option[] options = combine(
+            getDefaultCamelKarafOptions(),
+            new Option[] {
+                new DoNotModifyLogOption(),
+                new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties")),
+//                KarafDistributionOption.debugConfiguration("9999", true)
+            });
+        return options;
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/fe8360f3/tests/camel-itest-osgi/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/resources/log4j.properties b/tests/camel-itest-osgi/src/test/resources/log4j.properties
index dbf1670..2b05265 100644
--- a/tests/camel-itest-osgi/src/test/resources/log4j.properties
+++ b/tests/camel-itest-osgi/src/test/resources/log4j.properties
@@ -29,6 +29,9 @@ log4j.logger.org.apache.activemq.spring=WARN
 # is very noisy at INFO level
 log4j.logger.org.ops4j.io=WARN
 
+# sift test
+log4j.logger.org.apache.camel.SIFT=DEBUG, sift
+
 # CONSOLE appender not used by default
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
@@ -40,3 +43,13 @@ log4j.appender.out.layout=org.apache.log4j.PatternLayout
 log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
 log4j.appender.out.file=target/camel-itest-osgi-test.log
 log4j.appender.out.append=true
+
+# Sift appender
+log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
+log4j.appender.sift.key=bundle.name
+log4j.appender.sift.default=karaf
+log4j.appender.sift.appender=org.apache.log4j.FileAppender
+log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
+log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | id=%X{camel.exchangeId} | %X{bundle.name} | %-5.5p |  %-32.32C %4L | %m%n
+log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log
+log4j.appender.sift.appender.append=true


[10/13] git commit: [CAMEL-6694] Allow user to pass logger instance in camel-log endpoint URI

Posted by da...@apache.org.
[CAMEL-6694] Allow user to pass logger instance in camel-log endpoint
URI

The URI has form: log:logger-name?level=info&logger=#mylogger

"mylogger" is registered in context's registry


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

Branch: refs/heads/camel-2.12.x
Commit: 043449cb2cc1453471adebd9bc15205732764ee9
Parents: 773e5da
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Tue Apr 1 12:06:36 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:39:40 2014 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       | 20 +++++++-
 .../camel/itest/osgi/core/log/LogRouteTest.java | 48 +++++++++++++++++++-
 .../src/test/resources/log4j.properties         | 13 ++++++
 3 files changed, 79 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/043449cb/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 250d745..b3dc3a7 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
@@ -28,6 +28,7 @@ import org.apache.camel.processor.DefaultExchangeFormatter;
 import org.apache.camel.processor.ThroughputLogger;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.util.CamelLogger;
+import org.slf4j.Logger;
 
 /**
  * The <a href="http://camel.apache.org/log.html">Log Component</a>
@@ -45,12 +46,18 @@ public class LogComponent extends UriEndpointComponent {
     
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         LoggingLevel level = getLoggingLevel(parameters);
+        Logger providedLogger = getLogger(parameters);
 
         LogEndpoint endpoint = new LogEndpoint(uri, this);
         endpoint.setLevel(level.name());
         setProperties(endpoint, parameters);
 
-        CamelLogger camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
+        CamelLogger camelLogger = null; 
+        if (providedLogger == null) {
+            camelLogger = new CamelLogger(remaining, level, endpoint.getMarker());
+        } else {
+            camelLogger = new CamelLogger(providedLogger, level, endpoint.getMarker());
+        }
         Processor logger;
         if (endpoint.getGroupSize() != null) {
             logger = new ThroughputLogger(camelLogger, endpoint.getGroupSize());
@@ -89,6 +96,17 @@ public class LogComponent extends UriEndpointComponent {
         return LoggingLevel.valueOf(levelText.toUpperCase(Locale.ENGLISH));
     }
 
+    /**
+     * Gets optional {@link Logger} instance from parameters. If non-null, the provided instance will be used as
+     * {@link Logger} in {@link CamelLogger}
+     * 
+     * @param parameters
+     * @return
+     */
+    protected Logger getLogger(Map<String, Object> parameters) {
+        return getAndRemoveOrResolveReferenceParameter(parameters, "logger", Logger.class);
+    }
+
     public ExchangeFormatter getExchangeFormatter() {
         return exchangeFormatter;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/043449cb/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
index 09e4ebc..e7faed4 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
@@ -16,10 +16,21 @@
  */
 package org.apache.camel.itest.osgi.core.log;
 
+import java.io.File;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import static org.ops4j.pax.exam.OptionUtils.*;
 
 @RunWith(JUnit4TestRunner.class)
 public class LogRouteTest extends OSGiIntegrationTestSupport {
@@ -40,6 +51,14 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     }
 
     @Test
+    public void testSendMessageToInfoLogWithSiftLogging() throws Exception {
+        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=debug&logger=#mylogger", "<level>DEBUG</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT?level=error&logger=#mylogger", "<level>ERROR</level>");
+    }
+
+    @Test
     public void testSendMessageToBadLevel() throws Exception {
         try {
             template.sendBody("log:org.apache.camel.TEST?level=noSuchLevel", "<level>noSuchLevel</level>");
@@ -53,6 +72,33 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     public boolean isUseRouteBuilder() {
         return false;
     }
-   
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        CamelContext camelContext = super.createCamelContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry registry = super.createRegistry();
+        registry.bind("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
+        return registry;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        Option[] options = combine(
+            getDefaultCamelKarafOptions(),
+            new Option[] {
+                new DoNotModifyLogOption(),
+                new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties")),
+//                KarafDistributionOption.debugConfiguration("9999", true)
+            });
+        return options;
+    }
+
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/043449cb/tests/camel-itest-osgi/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/resources/log4j.properties b/tests/camel-itest-osgi/src/test/resources/log4j.properties
index dbf1670..2b05265 100644
--- a/tests/camel-itest-osgi/src/test/resources/log4j.properties
+++ b/tests/camel-itest-osgi/src/test/resources/log4j.properties
@@ -29,6 +29,9 @@ log4j.logger.org.apache.activemq.spring=WARN
 # is very noisy at INFO level
 log4j.logger.org.ops4j.io=WARN
 
+# sift test
+log4j.logger.org.apache.camel.SIFT=DEBUG, sift
+
 # CONSOLE appender not used by default
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
@@ -40,3 +43,13 @@ log4j.appender.out.layout=org.apache.log4j.PatternLayout
 log4j.appender.out.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
 log4j.appender.out.file=target/camel-itest-osgi-test.log
 log4j.appender.out.append=true
+
+# Sift appender
+log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender
+log4j.appender.sift.key=bundle.name
+log4j.appender.sift.default=karaf
+log4j.appender.sift.appender=org.apache.log4j.FileAppender
+log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout
+log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | id=%X{camel.exchangeId} | %X{bundle.name} | %-5.5p |  %-32.32C %4L | %m%n
+log4j.appender.sift.appender.file=${karaf.data}/log/$\\{bundle.name\\}.log
+log4j.appender.sift.appender.append=true


[08/13] git commit: [CAMEL-6694] Added OSGi integration tests for logging with MDC SIFT logger

Posted by da...@apache.org.
[CAMEL-6694] Added OSGi integration tests for logging with MDC SIFT logger


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

Branch: refs/heads/camel-2.13.x
Commit: 0f5db8ce2adf4bbbc308d3d0f3d9a8f1990ffa71
Parents: 426fa8e
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Thu Apr 3 13:38:07 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:39:11 2014 +0200

----------------------------------------------------------------------
 .../camel/itest/osgi/core/log/LogRouteTest.java | 46 ---------
 ...ogRouteWithLoggersPresentInRegistryTest.java | 98 ++++++++++++++++++++
 .../log/LogRouteWithNonDefaultLoggerTest.java   | 96 +++++++++++++++++++
 3 files changed, 194 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/0f5db8ce/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
index e7faed4..139daeb 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
@@ -16,21 +16,10 @@
  */
 package org.apache.camel.itest.osgi.core.log;
 
-import java.io.File;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
-import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.slf4j.LoggerFactory;
-
-import static org.ops4j.pax.exam.OptionUtils.*;
 
 @RunWith(JUnit4TestRunner.class)
 public class LogRouteTest extends OSGiIntegrationTestSupport {
@@ -51,14 +40,6 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     }
 
     @Test
-    public void testSendMessageToInfoLogWithSiftLogging() throws Exception {
-        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=debug&logger=#mylogger", "<level>DEBUG</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=error&logger=#mylogger", "<level>ERROR</level>");
-    }
-
-    @Test
     public void testSendMessageToBadLevel() throws Exception {
         try {
             template.sendBody("log:org.apache.camel.TEST?level=noSuchLevel", "<level>noSuchLevel</level>");
@@ -73,32 +54,5 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
         return false;
     }
 
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        CamelContext camelContext = super.createCamelContext();
-        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
-        camelContext.setUseMDCLogging(true);
-        return camelContext;
-    }
-
-    @Override
-    protected JndiRegistry createRegistry() throws Exception {
-        JndiRegistry registry = super.createRegistry();
-        registry.bind("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
-        return registry;
-    }
-
-    @Configuration
-    public static Option[] configure() throws Exception {
-        Option[] options = combine(
-            getDefaultCamelKarafOptions(),
-            new Option[] {
-                new DoNotModifyLogOption(),
-                new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties")),
-//                KarafDistributionOption.debugConfiguration("9999", true)
-            });
-        return options;
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/0f5db8ce/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
new file mode 100644
index 0000000..2a15d73
--- /dev/null
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
@@ -0,0 +1,98 @@
+/**
+ * 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.itest.osgi.core.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.osgi.CamelContextFactory;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.not;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@RunWith(JUnit4TestRunner.class)
+public class LogRouteWithLoggersPresentInRegistryTest extends OSGiIntegrationTestSupport {
+
+    @Test
+    public void testSendMessageToProvidedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info&logger=#mylogger1", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug&logger=#mylogger1", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error&logger=#mylogger1", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Test
+    public void testSendMessageToCamelCreatedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=info", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=debug", "<level>DEBUG</level>");
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=error", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), not(equalTo(bundleContext.getBundle().getSymbolicName() + ".log")));
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        LOG.info("Get the bundleContext is " + bundleContext);
+        LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId());
+
+        setThreadContextClassLoader();
+
+        CamelContextFactory factory = new CamelContextFactory();
+        factory.setBundleContext(bundleContext);
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("mylogger1", LoggerFactory.getLogger("org.apache.camel.SIFT.l1"));
+        registry.put("mylogger2", LoggerFactory.getLogger("org.apache.camel.SIFT.l2"));
+        factory.setRegistry(registry);
+        CamelContext camelContext = factory.createContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return combine(
+            getDefaultCamelKarafOptions(),
+            new DoNotModifyLogOption(),
+            new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties"))
+        );
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/0f5db8ce/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
new file mode 100644
index 0000000..408b7d8
--- /dev/null
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
@@ -0,0 +1,96 @@
+/**
+ * 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.itest.osgi.core.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.osgi.CamelContextFactory;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@RunWith(JUnit4TestRunner.class)
+public class LogRouteWithNonDefaultLoggerTest extends OSGiIntegrationTestSupport {
+
+    @Test
+    public void testSendMessageToProvidedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug&logger=#mylogger", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error&logger=#mylogger", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Test
+    public void testSendMessageToRegistryDefaultLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        LOG.info("Get the bundleContext is " + bundleContext);
+        LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId());
+
+        setThreadContextClassLoader();
+
+        CamelContextFactory factory = new CamelContextFactory();
+        factory.setBundleContext(bundleContext);
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
+        factory.setRegistry(registry);
+        CamelContext camelContext = factory.createContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return combine(
+            getDefaultCamelKarafOptions(),
+            new DoNotModifyLogOption(),
+            new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties"))
+        );
+    }
+
+}


[02/13] git commit: [CAMEL-6694] lookup logger in registry when single instance available

Posted by da...@apache.org.
[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/7d9f281c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7d9f281c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7d9f281c

Branch: refs/heads/master
Commit: 7d9f281c307a3fe33e99c70cbdae523be980c61e
Parents: d09cfdd
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Thu Apr 3 12:51:18 2014 +0200
Committer: Grzegorz Grzybek <gr...@gmail.com>
Committed: Thu Apr 3 12:51:18 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/7d9f281c/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/7d9f281c/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;
+    }
+
+}


[05/13] git commit: CAMEL-6694: Fixed CS

Posted by da...@apache.org.
CAMEL-6694: Fixed CS


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

Branch: refs/heads/master
Commit: fc91c5883e4387b3e6d393de7f0a7fc311faeaa2
Parents: 5646830
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Apr 4 08:38:19 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:38:19 2014 +0200

----------------------------------------------------------------------
 .../apache/camel/component/log/LogCustomLoggerTest.java  | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/fc91c588/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
index 7114f53..908b8c8 100644
--- 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
@@ -16,21 +16,22 @@
  */
 package org.apache.camel.component.log;
 
+import java.io.StringWriter;
+
 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.AppenderSkeleton;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
 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;
 
@@ -44,7 +45,7 @@ public class LogCustomLoggerTest extends ContextTestSupport {
     // to capture the warnings from LogComponent
     private static StringWriter sw2;
 
-    private static class CapturingAppender extends AppenderSkeleton {
+    private static final class CapturingAppender extends AppenderSkeleton {
         private StringWriter sw;
 
         private CapturingAppender(StringWriter sw) {


[03/13] git commit: [CAMEL-6694] Added OSGi integration tests for logging with MDC SIFT logger

Posted by da...@apache.org.
[CAMEL-6694] Added OSGi integration tests for logging with MDC SIFT logger


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

Branch: refs/heads/master
Commit: 45305434b80e3b9168b599f38312969d4d0c115e
Parents: 7d9f281
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Thu Apr 3 13:38:07 2014 +0200
Committer: Grzegorz Grzybek <gr...@gmail.com>
Committed: Thu Apr 3 13:38:07 2014 +0200

----------------------------------------------------------------------
 .../camel/itest/osgi/core/log/LogRouteTest.java | 46 ---------
 ...ogRouteWithLoggersPresentInRegistryTest.java | 98 ++++++++++++++++++++
 .../log/LogRouteWithNonDefaultLoggerTest.java   | 96 +++++++++++++++++++
 3 files changed, 194 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/45305434/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
index e7faed4..139daeb 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
@@ -16,21 +16,10 @@
  */
 package org.apache.camel.itest.osgi.core.log;
 
-import java.io.File;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
-import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.slf4j.LoggerFactory;
-
-import static org.ops4j.pax.exam.OptionUtils.*;
 
 @RunWith(JUnit4TestRunner.class)
 public class LogRouteTest extends OSGiIntegrationTestSupport {
@@ -51,14 +40,6 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     }
 
     @Test
-    public void testSendMessageToInfoLogWithSiftLogging() throws Exception {
-        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=debug&logger=#mylogger", "<level>DEBUG</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=error&logger=#mylogger", "<level>ERROR</level>");
-    }
-
-    @Test
     public void testSendMessageToBadLevel() throws Exception {
         try {
             template.sendBody("log:org.apache.camel.TEST?level=noSuchLevel", "<level>noSuchLevel</level>");
@@ -73,32 +54,5 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
         return false;
     }
 
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        CamelContext camelContext = super.createCamelContext();
-        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
-        camelContext.setUseMDCLogging(true);
-        return camelContext;
-    }
-
-    @Override
-    protected JndiRegistry createRegistry() throws Exception {
-        JndiRegistry registry = super.createRegistry();
-        registry.bind("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
-        return registry;
-    }
-
-    @Configuration
-    public static Option[] configure() throws Exception {
-        Option[] options = combine(
-            getDefaultCamelKarafOptions(),
-            new Option[] {
-                new DoNotModifyLogOption(),
-                new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties")),
-//                KarafDistributionOption.debugConfiguration("9999", true)
-            });
-        return options;
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/45305434/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
new file mode 100644
index 0000000..2a15d73
--- /dev/null
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
@@ -0,0 +1,98 @@
+/**
+ * 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.itest.osgi.core.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.osgi.CamelContextFactory;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.not;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@RunWith(JUnit4TestRunner.class)
+public class LogRouteWithLoggersPresentInRegistryTest extends OSGiIntegrationTestSupport {
+
+    @Test
+    public void testSendMessageToProvidedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info&logger=#mylogger1", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug&logger=#mylogger1", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error&logger=#mylogger1", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Test
+    public void testSendMessageToCamelCreatedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=info", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=debug", "<level>DEBUG</level>");
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=error", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), not(equalTo(bundleContext.getBundle().getSymbolicName() + ".log")));
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        LOG.info("Get the bundleContext is " + bundleContext);
+        LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId());
+
+        setThreadContextClassLoader();
+
+        CamelContextFactory factory = new CamelContextFactory();
+        factory.setBundleContext(bundleContext);
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("mylogger1", LoggerFactory.getLogger("org.apache.camel.SIFT.l1"));
+        registry.put("mylogger2", LoggerFactory.getLogger("org.apache.camel.SIFT.l2"));
+        factory.setRegistry(registry);
+        CamelContext camelContext = factory.createContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return combine(
+            getDefaultCamelKarafOptions(),
+            new DoNotModifyLogOption(),
+            new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties"))
+        );
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/45305434/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
new file mode 100644
index 0000000..408b7d8
--- /dev/null
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
@@ -0,0 +1,96 @@
+/**
+ * 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.itest.osgi.core.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.osgi.CamelContextFactory;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@RunWith(JUnit4TestRunner.class)
+public class LogRouteWithNonDefaultLoggerTest extends OSGiIntegrationTestSupport {
+
+    @Test
+    public void testSendMessageToProvidedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug&logger=#mylogger", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error&logger=#mylogger", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Test
+    public void testSendMessageToRegistryDefaultLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        LOG.info("Get the bundleContext is " + bundleContext);
+        LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId());
+
+        setThreadContextClassLoader();
+
+        CamelContextFactory factory = new CamelContextFactory();
+        factory.setBundleContext(bundleContext);
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
+        factory.setRegistry(registry);
+        CamelContext camelContext = factory.createContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return combine(
+            getDefaultCamelKarafOptions(),
+            new DoNotModifyLogOption(),
+            new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties"))
+        );
+    }
+
+}


[12/13] git commit: [CAMEL-6694] Added OSGi integration tests for logging with MDC SIFT logger

Posted by da...@apache.org.
[CAMEL-6694] Added OSGi integration tests for logging with MDC SIFT logger


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

Branch: refs/heads/camel-2.12.x
Commit: b79265fed1ebaf0dcb5b588bb1aa588905b9a205
Parents: f5f8a10
Author: Grzegorz Grzybek <gr...@gmail.com>
Authored: Thu Apr 3 13:38:07 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:39:56 2014 +0200

----------------------------------------------------------------------
 .../camel/itest/osgi/core/log/LogRouteTest.java | 46 ---------
 ...ogRouteWithLoggersPresentInRegistryTest.java | 98 ++++++++++++++++++++
 .../log/LogRouteWithNonDefaultLoggerTest.java   | 96 +++++++++++++++++++
 3 files changed, 194 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/b79265fe/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
index e7faed4..139daeb 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteTest.java
@@ -16,21 +16,10 @@
  */
 package org.apache.camel.itest.osgi.core.log;
 
-import java.io.File;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
-import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
-import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.Configuration;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
-import org.slf4j.LoggerFactory;
-
-import static org.ops4j.pax.exam.OptionUtils.*;
 
 @RunWith(JUnit4TestRunner.class)
 public class LogRouteTest extends OSGiIntegrationTestSupport {
@@ -51,14 +40,6 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
     }
 
     @Test
-    public void testSendMessageToInfoLogWithSiftLogging() throws Exception {
-        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=debug&logger=#mylogger", "<level>DEBUG</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=info&logger=#mylogger", "<level>INFO</level>");
-        template.sendBody("log:org.apache.camel.SIFT?level=error&logger=#mylogger", "<level>ERROR</level>");
-    }
-
-    @Test
     public void testSendMessageToBadLevel() throws Exception {
         try {
             template.sendBody("log:org.apache.camel.TEST?level=noSuchLevel", "<level>noSuchLevel</level>");
@@ -73,32 +54,5 @@ public class LogRouteTest extends OSGiIntegrationTestSupport {
         return false;
     }
 
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        CamelContext camelContext = super.createCamelContext();
-        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
-        camelContext.setUseMDCLogging(true);
-        return camelContext;
-    }
-
-    @Override
-    protected JndiRegistry createRegistry() throws Exception {
-        JndiRegistry registry = super.createRegistry();
-        registry.bind("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
-        return registry;
-    }
-
-    @Configuration
-    public static Option[] configure() throws Exception {
-        Option[] options = combine(
-            getDefaultCamelKarafOptions(),
-            new Option[] {
-                new DoNotModifyLogOption(),
-                new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties")),
-//                KarafDistributionOption.debugConfiguration("9999", true)
-            });
-        return options;
-    }
-
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/b79265fe/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
new file mode 100644
index 0000000..2a15d73
--- /dev/null
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithLoggersPresentInRegistryTest.java
@@ -0,0 +1,98 @@
+/**
+ * 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.itest.osgi.core.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.osgi.CamelContextFactory;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.not;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@RunWith(JUnit4TestRunner.class)
+public class LogRouteWithLoggersPresentInRegistryTest extends OSGiIntegrationTestSupport {
+
+    @Test
+    public void testSendMessageToProvidedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info&logger=#mylogger1", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug&logger=#mylogger1", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error&logger=#mylogger1", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Test
+    public void testSendMessageToCamelCreatedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=info", "<level>INFO</level>");
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=debug", "<level>DEBUG</level>");
+        template.sendBody("log:org.apache.camel.SIFT.relevant.logger.name?level=error", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), not(equalTo(bundleContext.getBundle().getSymbolicName() + ".log")));
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        LOG.info("Get the bundleContext is " + bundleContext);
+        LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId());
+
+        setThreadContextClassLoader();
+
+        CamelContextFactory factory = new CamelContextFactory();
+        factory.setBundleContext(bundleContext);
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("mylogger1", LoggerFactory.getLogger("org.apache.camel.SIFT.l1"));
+        registry.put("mylogger2", LoggerFactory.getLogger("org.apache.camel.SIFT.l2"));
+        factory.setRegistry(registry);
+        CamelContext camelContext = factory.createContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return combine(
+            getDefaultCamelKarafOptions(),
+            new DoNotModifyLogOption(),
+            new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties"))
+        );
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/b79265fe/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
new file mode 100644
index 0000000..408b7d8
--- /dev/null
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/osgi/core/log/LogRouteWithNonDefaultLoggerTest.java
@@ -0,0 +1,96 @@
+/**
+ * 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.itest.osgi.core.log;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.itest.osgi.OSGiIntegrationTestSupport;
+import org.apache.camel.osgi.CamelContextFactory;
+import org.apache.karaf.tooling.exam.options.DoNotModifyLogOption;
+import org.apache.karaf.tooling.exam.options.KarafDistributionConfigurationFileReplacementOption;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.Configuration;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+@RunWith(JUnit4TestRunner.class)
+public class LogRouteWithNonDefaultLoggerTest extends OSGiIntegrationTestSupport {
+
+    @Test
+    public void testSendMessageToProvidedLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info&logger=#mylogger", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug&logger=#mylogger", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error&logger=#mylogger", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Test
+    public void testSendMessageToRegistryDefaultLogggerWithSiftLogging() throws Exception {
+        template.sendBody("log:irrelevant.logger.name?level=info", "<level>INFO</level>");
+        template.sendBody("log:irrelevant.logger.name?level=debug", "<level>DEBUG</level>");
+        template.sendBody("log:irrelevant.logger.name?level=error", "<level>ERROR</level>");
+
+        File logDir = new File(System.getProperty("karaf.base"), "data/log");
+        File[] files = logDir.listFiles();
+        assertThat(files.length, equalTo(1));
+        assertThat(files[0].getName(), equalTo(bundleContext.getBundle().getSymbolicName() + ".log"));
+    }
+
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Override
+    protected CamelContext createCamelContext() throws Exception {
+        LOG.info("Get the bundleContext is " + bundleContext);
+        LOG.info("Application installed as bundle id: " + bundleContext.getBundle().getBundleId());
+
+        setThreadContextClassLoader();
+
+        CamelContextFactory factory = new CamelContextFactory();
+        factory.setBundleContext(bundleContext);
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("mylogger", LoggerFactory.getLogger("org.apache.camel.SIFT"));
+        factory.setRegistry(registry);
+        CamelContext camelContext = factory.createContext();
+        camelContext.setApplicationContextClassLoader(getClass().getClassLoader());
+        camelContext.setUseMDCLogging(true);
+        return camelContext;
+    }
+
+    @Configuration
+    public static Option[] configure() throws Exception {
+        return combine(
+            getDefaultCamelKarafOptions(),
+            new DoNotModifyLogOption(),
+            new KarafDistributionConfigurationFileReplacementOption("etc/org.ops4j.pax.logging.cfg", new File("src/test/resources/log4j.properties"))
+        );
+    }
+
+}


[11/13] git commit: [CAMEL-6694] lookup logger in registry when single instance available

Posted by da...@apache.org.
[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/f5f8a10e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f5f8a10e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f5f8a10e

Branch: refs/heads/camel-2.12.x
Commit: f5f8a10e72c617add1a3ab3bb5c04fa00b679f20
Parents: 043449c
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:49 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/f5f8a10e/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/f5f8a10e/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;
+    }
+
+}


[04/13] git commit: Merge branch 'CAMEL-6694' of https://github.com/grgrzybek/camel

Posted by da...@apache.org.
Merge branch 'CAMEL-6694' of https://github.com/grgrzybek/camel


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

Branch: refs/heads/master
Commit: 56468305ef13cebb3719815002b36827169495bc
Parents: 5f6477c 4530543
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Apr 4 08:34:57 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Apr 4 08:34:57 2014 +0200

----------------------------------------------------------------------
 .../camel/component/log/LogComponent.java       |  37 ++++-
 .../component/log/LogCustomLoggerTest.java      | 147 +++++++++++++++++++
 .../camel/itest/osgi/core/log/LogRouteTest.java |   2 +-
 ...ogRouteWithLoggersPresentInRegistryTest.java |  98 +++++++++++++
 .../log/LogRouteWithNonDefaultLoggerTest.java   |  96 ++++++++++++
 .../src/test/resources/log4j.properties         |  13 ++
 6 files changed, 389 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[07/13] git commit: [CAMEL-6694] lookup logger in registry when single instance available

Posted by da...@apache.org.
[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;
+    }
+
+}