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 2020/01/03 20:19:47 UTC
[camel] 02/03: CAMEL-14354: More optimizations in regards to object
allocations
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2e54a1202950cb8f760006967142a02a16a9f6b2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jan 3 18:53:30 2020 +0100
CAMEL-14354: More optimizations in regards to object allocations
---
.../org/apache/camel/support/MessageHelper.java | 40 +++++++++++---------
.../processor/DefaultExchangeFormatter.java | 43 ++++++++++++----------
2 files changed, 45 insertions(+), 38 deletions(-)
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index 8bbb5a4..a794920 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -198,7 +198,7 @@ public final class MessageHelper {
}
}
- return extractValueForLogging(value, message, "", streams, false, maxChars);
+ return extractValueForLogging(value, message, streams, false, maxChars);
}
/**
@@ -257,14 +257,19 @@ public final class MessageHelper {
*
* @see org.apache.camel.Exchange#LOG_DEBUG_BODY_MAX_CHARS
* @param message the message
- * @param prepend a message to prepend
+ * @param prepend a message to prepend (optional)
* @param allowStreams whether or not streams is allowed
* @param allowFiles whether or not files is allowed (currently not in use)
* @param maxChars limit to maximum number of chars. Use 0 for not limit, and -1 for turning logging message body off.
* @return the logging message
*/
public static String extractBodyForLogging(Message message, String prepend, boolean allowStreams, boolean allowFiles, int maxChars) {
- return extractValueForLogging(message.getBody(), message, prepend, allowStreams, allowFiles, maxChars);
+ String value = extractValueForLogging(message.getBody(), message, allowStreams, allowFiles, maxChars);
+ if (prepend != null) {
+ return prepend + value;
+ } else {
+ return value;
+ }
}
/**
@@ -275,44 +280,43 @@ public final class MessageHelper {
* @see org.apache.camel.Exchange#LOG_DEBUG_BODY_MAX_CHARS
* @param obj the value
* @param message the message
- * @param prepend a message to prepend
* @param allowStreams whether or not streams is allowed
* @param allowFiles whether or not files is allowed (currently not in use)
* @param maxChars limit to maximum number of chars. Use 0 for not limit, and -1 for turning logging message body off.
* @return the logging message
*/
- public static String extractValueForLogging(Object obj, Message message, String prepend, boolean allowStreams, boolean allowFiles, int maxChars) {
+ public static String extractValueForLogging(Object obj, Message message, boolean allowStreams, boolean allowFiles, int maxChars) {
if (maxChars < 0) {
- return prepend + "[Body is not logged]";
+ return "[Body is not logged]";
}
if (obj == null) {
- return prepend + "[Body is null]";
+ return "[Body is null]";
}
if (!allowStreams) {
if (instanceOf(obj, "java.xml.transform.Source")) {
- return prepend + "[Body is instance of java.xml.transform.Source]";
+ return "[Body is instance of java.xml.transform.Source]";
} else if (obj instanceof StreamCache) {
- return prepend + "[Body is instance of org.apache.camel.StreamCache]";
+ return "[Body is instance of org.apache.camel.StreamCache]";
} else if (obj instanceof InputStream) {
- return prepend + "[Body is instance of java.io.InputStream]";
+ return "[Body is instance of java.io.InputStream]";
} else if (obj instanceof OutputStream) {
- return prepend + "[Body is instance of java.io.OutputStream]";
+ return "[Body is instance of java.io.OutputStream]";
} else if (obj instanceof Reader) {
- return prepend + "[Body is instance of java.io.Reader]";
+ return "[Body is instance of java.io.Reader]";
} else if (obj instanceof Writer) {
- return prepend + "[Body is instance of java.io.Writer]";
+ return "[Body is instance of java.io.Writer]";
} else if (obj instanceof WrappedFile || obj instanceof File) {
if (!allowFiles) {
- return prepend + "[Body is file based: " + obj + "]";
+ return "[Body is file based: " + obj + "]";
}
}
}
if (!allowFiles) {
if (obj instanceof WrappedFile || obj instanceof File) {
- return prepend + "[Body is file based: " + obj + "]";
+ return "[Body is file based: " + obj + "]";
}
}
@@ -356,7 +360,7 @@ public final class MessageHelper {
}
if (body == null) {
- return prepend + "[Body is null]";
+ return "[Body is null]";
}
// clip body if length enabled and the body is too big
@@ -364,7 +368,7 @@ public final class MessageHelper {
body = body.substring(0, maxChars) + "... [Body clipped after " + maxChars + " chars, total length is " + body.length() + "]";
}
- return prepend + body;
+ return body;
}
private static boolean instanceOf(Object obj, String interfaceName) {
@@ -479,7 +483,7 @@ public final class MessageHelper {
}
sb.append(">");
- String xml = extractBodyForLogging(message, "", allowStreams, allowFiles, maxChars);
+ String xml = extractBodyForLogging(message, null, allowStreams, allowFiles, maxChars);
if (xml != null) {
// must always xml encode
sb.append(StringHelper.xmlEncode(xml));
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java b/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
index 2679243e..9c3a6aa 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/processor/DefaultExchangeFormatter.java
@@ -80,18 +80,20 @@ public class DefaultExchangeFormatter implements ExchangeFormatter {
@UriParam(label = "formatting", enums = "Default,Tab,Fixed", defaultValue = "Default", description = "Sets the outputs style to use.")
private OutputStyle style = OutputStyle.Default;
- private String style(String label) {
+ private StringBuilder style(StringBuilder sb, String label) {
if (style == OutputStyle.Default) {
if (multiline) {
- return " " + label + ": ";
+ sb.append(" ").append(label).append(": ");
} else {
- return ", " + label + ": ";
+ sb.append(", ").append(label).append(": ");
}
} else if (style == OutputStyle.Tab) {
- return "'t" + label + ": " ;
+ sb.append("\t").append(label).append(": ");
} else {
- return String.format("\t%-20s", label);
+ String s = String.format("\t%-20s", label);
+ sb.append(s);
}
+ return sb;
}
@Override
@@ -103,32 +105,32 @@ public class DefaultExchangeFormatter implements ExchangeFormatter {
if (multiline) {
sb.append(SEPARATOR);
}
- sb.append(style("Id")).append(exchange.getExchangeId());
+ style(sb, "Id").append(exchange.getExchangeId());
}
if (showAll || showExchangePattern) {
if (multiline) {
sb.append(SEPARATOR);
}
- sb.append(style("ExchangePattern")).append(exchange.getPattern());
+ style(sb, "ExchangePattern").append(exchange.getPattern());
}
if (showAll || showProperties) {
if (multiline) {
sb.append(SEPARATOR);
}
- sb.append(style("Properties")).append(sortMap(filterHeaderAndProperties(exchange.getProperties())));
+ style(sb, "Properties").append(sortMap(filterHeaderAndProperties(exchange.getProperties())));
}
if (showAll || showHeaders) {
if (multiline) {
sb.append(SEPARATOR);
}
- sb.append(style("Headers")).append(sortMap(filterHeaderAndProperties(in.getHeaders())));
+ style(sb, "Headers").append(sortMap(filterHeaderAndProperties(in.getHeaders())));
}
if (showAll || showBodyType) {
if (multiline) {
sb.append(SEPARATOR);
}
- sb.append(style("BodyType")).append(getBodyTypeAsString(in));
+ style(sb, "BodyType").append(getBodyTypeAsString(in));
}
if (showAll || showBody) {
if (multiline) {
@@ -138,7 +140,7 @@ public class DefaultExchangeFormatter implements ExchangeFormatter {
if (skipBodyLineSeparator) {
body = StringHelper.replaceAll(body, LS, "");
}
- sb.append(style("Body")).append(body);
+ style(sb, "Body").append(body);
}
if (showAll || showException || showCaughtException) {
@@ -157,21 +159,22 @@ public class DefaultExchangeFormatter implements ExchangeFormatter {
sb.append(SEPARATOR);
}
if (caught) {
- sb.append(style("CaughtExceptionType")).append(exception.getClass().getCanonicalName());
- sb.append(style("CaughtExceptionMessage")).append(exception.getMessage());
+ style(sb, "CaughtExceptionType").append(exception.getClass().getCanonicalName());
+ style(sb, "CaughtExceptionMessage").append(exception.getMessage());
} else {
- sb.append(style("ExceptionType")).append(exception.getClass().getCanonicalName());
- sb.append(style("ExceptionMessage")).append(exception.getMessage());
+ style(sb, "ExceptionType").append(exception.getClass().getCanonicalName());
+ style(sb, "ExceptionMessage").append(exception.getMessage());
}
if (showAll || showStackTrace) {
StringWriter sw = new StringWriter();
exception.printStackTrace(new PrintWriter(sw));
- sb.append(style("StackTrace")).append(sw.toString());
+ style(sb, "StackTrace").append(sw.toString());
}
}
}
- if (maxChars > 0) {
+ // only cut if we hit max-chars limit
+ if (maxChars > 0 && sb.length() > maxChars) {
StringBuilder answer = new StringBuilder();
for (String s : sb.toString().split(SEPARATOR)) {
if (s != null) {
@@ -196,8 +199,8 @@ public class DefaultExchangeFormatter implements ExchangeFormatter {
sb.append("]");
return sb.toString();
} else {
- // get rid of the leading space comma if needed
- if (sb.length() > 0 && sb.charAt(0) == ',' && sb.charAt(1) == ' ') {
+ // get rid of the leading comma space if needed
+ if (sb.length() > 1 && sb.charAt(0) == ',' && sb.charAt(1) == ' ') {
sb.replace(0, 2, "");
}
sb.insert(0, "Exchange[");
@@ -418,7 +421,7 @@ public class DefaultExchangeFormatter implements ExchangeFormatter {
}
}
- return MessageHelper.extractBodyForLogging(message, "", isShowStreams(), isShowFiles(), getMaxChars(message));
+ return MessageHelper.extractBodyForLogging(message, null, isShowStreams(), isShowFiles(), getMaxChars(message));
}
private int getMaxChars(Message message) {