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

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

[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