Author: davsclaus
Date: Tue Jul 15 02:33:17 2008
New Revision: 676850
URL: http://svn.apache.org/viewvc?rev=676850&view=rev
Log:
CAMEL-721: Log component now hos output options similiar to the tracer.
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
(with props)
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
(with props)
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogComponent.java
Tue Jul 15 02:33:17 2008
@@ -20,6 +20,7 @@
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
+import org.apache.camel.util.IntrospectionSupport;
import org.apache.camel.converter.ObjectConverter;
import org.apache.camel.impl.DefaultComponent;
import org.apache.camel.impl.ProcessorEndpoint;
@@ -43,7 +44,12 @@
if (groupSize != null) {
logger = new ThroughputLogger(remaining, level,
ObjectConverter.toInteger(groupSize));
} else {
- logger = new Logger(remaining, level);
+ LogFormatter formatter = new LogFormatter();
+ IntrospectionSupport.setProperties(formatter, parameters);
+
+ logger = new Logger(remaining);
+ logger.setLevel(level);
+ logger.setFormatter(formatter);
}
return new ProcessorEndpoint(uri, this, logger);
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java?rev=676850&view=auto
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
(added)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
Tue Jul 15 02:33:17 2008
@@ -0,0 +1,173 @@
+/**
+ * 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.processor.interceptor.ExchangeFormatter;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * Log formatter to format the logging output.
+ */
+public class LogFormatter implements ExchangeFormatter {
+
+ private boolean showExchangeId;
+ private boolean showProperties;
+ private boolean showHeaders;
+ private boolean showBodyType = true;
+ private boolean showBody = true;
+ private boolean showOut;
+ private boolean showAll;
+ private boolean multiline;
+
+ public Object format(Exchange exchange) {
+ Message in = exchange.getIn();
+
+ StringBuilder sb = new StringBuilder("");
+ if (showAll || showExchangeId) {
+ if (multiline) sb.append('\n');
+ sb.append(", Id:").append(exchange.getExchangeId());
+ }
+ if (showAll || showProperties) {
+ if (multiline) sb.append('\n');
+ sb.append(", Properties:").append(exchange.getProperties());
+ }
+ if (showAll || showHeaders) {
+ if (multiline) sb.append('\n');
+ sb.append(", Headers:").append(in.getHeaders());
+ }
+ if (showAll || showBodyType) {
+ if (multiline) sb.append('\n');
+ sb.append(", BodyType:").append(getBodyTypeAsString(in));
+ }
+ if (showAll || showBody) {
+ if (multiline) sb.append('\n');
+ sb.append(", Body:").append(getBodyAsString(in));
+ }
+
+ Message out = exchange.getOut(false);
+ if (showAll || showOut) {
+ if (out != null) {
+ if (showAll || showHeaders) {
+ if (multiline) sb.append('\n');
+ sb.append(", OutHeaders:").append(out.getHeaders());
+ }
+ if (showAll || showBodyType) {
+ if (multiline) sb.append('\n');
+ sb.append(",
OutBodyType:").append(getBodyTypeAsString(out));
+ }
+ if (showAll || showBody) {
+ if (multiline) sb.append('\n');
+ sb.append(", OutBody:").append(getBodyAsString(out));
+ }
+ } else {
+ if (multiline) sb.append('\n');
+ sb.append(", Out: null");
+ }
+ }
+
+ // get rid of the leading space comma if needed
+ return "Exchange[" + (multiline ? sb.append(']').toString() :
sb.toString().substring(2) + "]");
+ }
+
+ public boolean isShowExchangeId() {
+ return showExchangeId;
+ }
+
+ public void setShowExchangeId(boolean showExchangeId) {
+ this.showExchangeId = showExchangeId;
+ }
+
+ public boolean isShowProperties() {
+ return showProperties;
+ }
+
+ public void setShowProperties(boolean showProperties) {
+ this.showProperties = showProperties;
+ }
+
+ public boolean isShowHeaders() {
+ return showHeaders;
+ }
+
+ public void setShowHeaders(boolean showHeaders) {
+ this.showHeaders = showHeaders;
+ }
+
+ public boolean isShowBodyType() {
+ return showBodyType;
+ }
+
+ public void setShowBodyType(boolean showBodyType) {
+ this.showBodyType = showBodyType;
+ }
+
+ public boolean isShowBody() {
+ return showBody;
+ }
+
+ public void setShowBody(boolean showBody) {
+ this.showBody = showBody;
+ }
+
+ public boolean isShowOut() {
+ return showOut;
+ }
+
+ public void setShowOut(boolean showOut) {
+ this.showOut = showOut;
+ }
+
+ public boolean isShowAll() {
+ return showAll;
+ }
+
+ public void setShowAll(boolean showAll) {
+ this.showAll = showAll;
+ }
+
+ public boolean isMultiline() {
+ return multiline;
+ }
+
+ /**
+ * If enabled then each information is outputted on a newline.
+ */
+ public void setMultiline(boolean multiline) {
+ this.multiline = multiline;
+ }
+
+ // Implementation methods
+ //-------------------------------------------------------------------------
+ protected Object getBodyAsString(Message message) {
+ Object answer = message.getBody(String.class);
+ if (answer == null) {
+ answer = message.getBody();
+ }
+ return answer;
+ }
+
+ protected Object getBodyTypeAsString(Message message) {
+ String answer = ObjectHelper.className(message.getBody());
+ if (answer.startsWith("java.lang.")) {
+ return answer.substring(10);
+ }
+ return answer;
+ }
+
+}
Propchange:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/log/LogFormatter.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultComponent.java
Tue Jul 15 02:33:17 2008
@@ -115,6 +115,12 @@
throw new ResolveEndpointFailedException(uri, "Invalid uri syntax:
no ? marker however the uri "
+ "has & parameter separators. Check the uri if its missing a
? marker.");
}
+
+ // check for uri containing double && markers
+ if (uri.contains("&&")) {
+ throw new ResolveEndpointFailedException(uri, "Invalid uri syntax:
Double && marker found. "
+ + "Check the uri and remove the duplicate & marker.");
+ }
}
public CamelContext getCamelContext() {
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Logger.java
Tue Jul 15 02:33:17 2008
@@ -233,4 +233,8 @@
public void setLevel(LoggingLevel level) {
this.level = level;
}
+
+ public void setFormatter(ExchangeFormatter formatter) {
+ this.formatter = formatter;
+ }
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java?rev=676850&r1=676849&r2=676850&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/TraceFormatter.java
Tue Jul 15 02:33:17 2008
@@ -43,7 +43,7 @@
+ (showExchangeId ? " Id: " + exchange.getExchangeId() : "")
+ (showProperties ? " Properties:" + exchange.getProperties()
: "")
+ (showHeaders ? " Headers:" + in.getHeaders() : "")
- + (showBodyType ? " BodyType:" +
ObjectHelper.className(in.getBody()) : "")
+ + (showBodyType ? " BodyType:" + getBodyTypeAsString(in) : "")
+ (showBody ? " Body:" + getBodyAsString(in) : "")
+ (exception != null ? " Exception: " + exception : "");
}
@@ -119,6 +119,14 @@
return answer;
}
+ protected Object getBodyTypeAsString(Message message) {
+ String answer = ObjectHelper.className(message.getBody());
+ if (answer.startsWith("java.lang.")) {
+ return answer.substring(10);
+ }
+ return answer;
+ }
+
protected String getNodeMessage(TraceInterceptor interceptor) {
return interceptor.getNode().idOrCreate();
}
Added:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java?rev=676850&view=auto
==============================================================================
---
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
(added)
+++
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
Tue Jul 15 02:33:17 2008
@@ -0,0 +1,68 @@
+/**
+ * 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.ContextTestSupport;
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Producer;
+
+/**
+ * Log formatter test.
+ */
+public class LogFormatterTest extends ContextTestSupport {
+
+ public void testSendMessageToLogDefault() throws Exception {
+ template.sendBody("log:org.apache.camel.TEST", "Hello World");
+ }
+
+ public void testSendMessageToLogSingleOptions() throws Exception {
+ template.sendBody("log:org.apache.camel.TEST?showExchangeId=true",
"Hello World");
+ template.sendBody("log:org.apache.camel.TEST?showProperties=true",
"Hello World");
+ template.sendBody("log:org.apache.camel.TEST?showHeaders=true", "Hello
World");
+ template.sendBody("log:org.apache.camel.TEST?showBodyType=true",
"Hello World");
+ template.sendBody("log:org.apache.camel.TEST?showBody=true", "Hello
World");
+ template.sendBody("log:org.apache.camel.TEST?showOut=true", "Hello
World");
+ template.sendBody("log:org.apache.camel.TEST?showAll=true", "Hello
World");
+ }
+
+ public void testSendMessageToLogMultiOptions() throws Exception {
+
template.sendBody("log:org.apache.camel.TEST?showHeaders=true&showOut=true",
"Hello World");
+
template.sendBody("log:org.apache.camel.TEST?showProperties=true&showHeaders=true&showOut=true",
"Hello World");
+ }
+
+ public void testSendMessageToLogShowFalse() throws Exception {
+ template.sendBody("log:org.apache.camel.TEST?showBodyType=false",
"Hello World");
+ }
+
+ public void testSendMessageToLogMultiLine() throws Exception {
+ template.sendBody("log:org.apache.camel.TEST?multiline=true", "Hello
World");
+ }
+
+ public void testSendExchangeWithOut() throws Exception {
+ Endpoint endpoint =
resolveMandatoryEndpoint("log:org.apache.camel.TEST?showAll=true&multiline=true");
+ Exchange exchange = endpoint.createExchange();
+ exchange.getIn().setBody("Hello World");
+ exchange.getOut().setBody(22);
+
+ Producer producer = endpoint.createProducer();
+ producer.start();
+ producer.process(exchange);
+ producer.stop();
+ }
+
+}
Propchange:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/log/LogFormatterTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date