Author: carnold
Date: Mon Mar 15 02:30:16 2010
New Revision: 923034
URL: http://svn.apache.org/viewvc?rev=923034&view=rev
Log:
Bug 48910: LogSF did not support \\{ escape sequence
Modified:
logging/log4j/companions/extras/trunk/src/changes/changes.xml
logging/log4j/companions/extras/trunk/src/main/java/org/apache/log4j/LogSF.java
logging/log4j/companions/extras/trunk/src/test/java/org/apache/log4j/TestLogSF.java
Modified: logging/log4j/companions/extras/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/logging/log4j/companions/extras/trunk/src/changes/changes.xml?rev=923034&r1=923033&r2=923034&view=diff
==============================================================================
--- logging/log4j/companions/extras/trunk/src/changes/changes.xml (original)
+++ logging/log4j/companions/extras/trunk/src/changes/changes.xml Mon Mar 15
02:30:16 2010
@@ -29,6 +29,7 @@
<action action="fix" issue="46741">Leaving out %throwable in
ConversionPattern adds throwable to logging message regardless.</action>
<action action="fix" issue="48531">Unit tests fail for system dates
after 2009-12-31</action>
<action action="fix" issue="48778">LogMF performance improvement for
number and date types.</action>
+ <action action="fix" issue="48910">LogSF did not support \\{ escape
sequence.</action>
</release>
Modified:
logging/log4j/companions/extras/trunk/src/main/java/org/apache/log4j/LogSF.java
URL:
http://svn.apache.org/viewvc/logging/log4j/companions/extras/trunk/src/main/java/org/apache/log4j/LogSF.java?rev=923034&r1=923033&r2=923034&view=diff
==============================================================================
---
logging/log4j/companions/extras/trunk/src/main/java/org/apache/log4j/LogSF.java
(original)
+++
logging/log4j/companions/extras/trunk/src/main/java/org/apache/log4j/LogSF.java
Mon Mar 15 02:30:16 2010
@@ -46,22 +46,34 @@ public final class LogSF extends LogXF {
*/
private static String format(final String pattern,
final Object[] arguments) {
- if (arguments == null || pattern == null) {
- return pattern;
- }
- StringBuffer buf = new StringBuffer(pattern);
- int index = 0;
- int pos = buf.indexOf("{");
- while (pos >= 0 && pos < buf.length() - 1 && index < arguments.length)
{
- if (buf.charAt(pos + 1) == '}') {
- String subst = String.valueOf(arguments[index++]);
- buf.replace(pos, pos + 2, subst);
- pos += subst.length();
- } else {
- pos = buf.indexOf("{", pos + 1);
+ if (pattern != null) {
+ String retval = "";
+ int count = 0;
+ int prev = 0;
+ int pos = pattern.indexOf("{");
+ while(pos >= 0) {
+ if (pos == 0 || pattern.charAt(pos-1) != '\\') {
+ retval += pattern.substring(prev, pos);
+ if (pos + 1 < pattern.length() && pattern.charAt(pos+1) ==
'}') {
+ if(arguments != null && count < arguments.length) {
+ retval += arguments[count++];
+ } else {
+ retval += "{}";
+ }
+ prev = pos + 2;
+ } else {
+ retval += "{";
+ prev = pos + 1;
+ }
+ } else {
+ retval += pattern.substring(prev, pos - 1) + "{";
+ prev = pos + 1;
+ }
+ pos = pattern.indexOf("{", prev);
}
+ return retval + pattern.substring(prev);
}
- return buf.toString();
+ return null;
}
/**
@@ -71,7 +83,18 @@ public final class LogSF extends LogXF {
* @return Message string
*/
private static String format(final String pattern, final Object arg0) {
- return format(pattern, toArray(arg0));
+ if (pattern != null) {
+ //
+ // if there is an escaped brace, delegate to multi-param formatter
+ if (pattern.indexOf("\\{") >= 0) {
+ return format(pattern, new Object[] { arg0 });
+ }
+ int pos = pattern.indexOf("{}");
+ if (pos >= 0) {
+ return pattern.substring(0, pos) + arg0 +
pattern.substring(pos+2);
+ }
+ }
+ return pattern;
}
/**
Modified:
logging/log4j/companions/extras/trunk/src/test/java/org/apache/log4j/TestLogSF.java
URL:
http://svn.apache.org/viewvc/logging/log4j/companions/extras/trunk/src/test/java/org/apache/log4j/TestLogSF.java?rev=923034&r1=923033&r2=923034&view=diff
==============================================================================
---
logging/log4j/companions/extras/trunk/src/test/java/org/apache/log4j/TestLogSF.java
(original)
+++
logging/log4j/companions/extras/trunk/src/test/java/org/apache/log4j/TestLogSF.java
Mon Mar 15 02:30:16 2010
@@ -19,8 +19,6 @@ package org.apache.log4j;
import junit.framework.TestCase;
import java.io.CharArrayWriter;
-import java.text.MessageFormat;
-import java.util.Date;
/**
@@ -1171,4 +1169,23 @@ public class TestLogSF extends TestCase
assertEquals("Hello, World.", capture.getMessage());
}
+ /**
+ * Test \\{ escape sequence when only one parameter is present.
+ *
+ */
+ public void testEscapeOneParam() {
+ LogCapture capture = new LogCapture(Level.INFO);
+ LogSF.info(logger, "\\{}\\{{}}, World}\\{","Hello");
+ assertEquals("{}{Hello}, World}{", capture.getMessage());
+ }
+
+ /**
+ * Test \\{ escape sequence when more than one parameter is present.
+ *
+ */
+ public void testEscapeTwoParam() {
+ LogCapture capture = new LogCapture(Level.INFO);
+ LogSF.info(logger, "\\{}\\{{}}, {}}{}\\{","Hello", "World");
+ assertEquals("{}{Hello}, World}{}{", capture.getMessage());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]