You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2004/12/22 21:31:11 UTC
cvs commit: logging-log4j/tests/src/java/org/apache/log4j/pattern PatternParserTest.java
carnold 2004/12/22 12:31:11
Modified: src/java/org/apache/log4j/pattern DatePatternConverter.java
PatternConverter.java PatternParser.java
tests/src/java/org/apache/log4j/pattern
PatternParserTest.java
Log:
BUG 32064: TimeZone support in PatternLayout
Revision Changes Path
1.9 +18 -0 logging-log4j/src/java/org/apache/log4j/pattern/DatePatternConverter.java
Index: DatePatternConverter.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/pattern/DatePatternConverter.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- DatePatternConverter.java 7 Dec 2004 09:34:59 -0000 1.8
+++ DatePatternConverter.java 22 Dec 2004 20:31:11 -0000 1.9
@@ -25,6 +25,8 @@
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.TimeZone;
+import java.util.List;
/**
@@ -86,6 +88,22 @@
}
}
+ /**
+ * Sets the date format and timezone.
+ * @param options list of options, may be null.
+ */
+ public void setOptions(List options) {
+ if (options == null || options.size() == 0) {
+ setOption(null);
+ } else {
+ setOption((String) options.get(0));
+ if (options.size() > 1) {
+ TimeZone tz = TimeZone.getTimeZone((String) options.get(1));
+ df.setTimeZone(tz);
+ }
+ }
+ }
+
public StringBuffer convert(LoggingEvent event) {
buf.setLength(0);
1.14 +13 -0 logging-log4j/src/java/org/apache/log4j/pattern/PatternConverter.java
Index: PatternConverter.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/pattern/PatternConverter.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- PatternConverter.java 17 Dec 2004 19:58:15 -0000 1.13
+++ PatternConverter.java 22 Dec 2004 20:31:11 -0000 1.14
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.Writer;
+import java.util.List;
/**
@@ -127,6 +128,18 @@
public void setOption(String string) {
option = string;
+ }
+
+ /**
+ * Sets multiple options for the converter.
+ * @param options list of options, may be null.
+ * @remarks added to allow DateFormat to have multiple
+ * options, delegates to setOption for other converters.
+ */
+ public void setOptions(List options) {
+ if(options != null && options.size() >= 1) {
+ setOption((String) options.get(0));
+ }
}
/**
1.18 +13 -7 logging-log4j/src/java/org/apache/log4j/pattern/PatternParser.java
Index: PatternParser.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/pattern/PatternParser.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- PatternParser.java 14 Dec 2004 20:27:12 -0000 1.17
+++ PatternParser.java 22 Dec 2004 20:31:11 -0000 1.18
@@ -21,6 +21,8 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.List;
+import java.util.ArrayList;
// Contributors: Nelson Minar <(n...@monkey.org>
@@ -174,19 +176,23 @@
/**
* Returns the option, null if not in the expected format.
*/
- protected String extractOption() {
- if ((i < patternLength) && (pattern.charAt(i) == '{')) {
+ private String extractOption() { return null; }
+ protected List extractOptions() {
+ ArrayList options = null;
+ while ((i < patternLength) && (pattern.charAt(i) == '{')) {
int end = pattern.indexOf('}', i);
if (end > i) {
+ if (options == null) {
+ options = new ArrayList();
+ }
String r = pattern.substring(i + 1, end);
+ options.add(r);
i = end + 1;
-
- return r;
}
}
- return null;
+ return options;
}
public PatternConverter parse() {
@@ -350,7 +356,7 @@
//System.out.println("converter class [" + className + "]");
- String option = extractOption();
+ List options = extractOptions();
//System.out.println("Option is [" + option + "]");
if (className != null) {
@@ -361,7 +367,7 @@
// formattingInfo variable is an instance variable, occasionally reset
// and used over and over again
pc.setFormattingInfo(formattingInfo);
- pc.setOption(option);
+ pc.setOptions(options);
currentLiteral.setLength(0);
} else {
logger.error(
1.6 +22 -0 logging-log4j/tests/src/java/org/apache/log4j/pattern/PatternParserTest.java
Index: PatternParserTest.java
===================================================================
RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/pattern/PatternParserTest.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- PatternParserTest.java 12 May 2004 15:39:02 -0000 1.5
+++ PatternParserTest.java 22 Dec 2004 20:31:11 -0000 1.6
@@ -22,6 +22,9 @@
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.util.TimeZone;
import java.io.CharArrayWriter;
@@ -139,6 +142,25 @@
System.out.println("Result is[" + result + "]");
assertEquals(expectedRelativeTime + " INFO [main] "+logger.getName()+" - msg 1" + Layout.LINE_SEP, result);
}
+
+ public void testMultiOption() throws Exception {
+ PatternParser patternParser =
+ new PatternParser("%d{HH:mm:ss}{GMT} %d{HH:mm:ss} %c - %m%n");
+ PatternConverter head = patternParser.parse();
+
+ String result = convert(event, head);
+ System.out.println("Result is[" + result + "]");
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
+ String localTime = dateFormat.format(new Date(event.getTimeStamp()));
+ dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
+ String utcTime = dateFormat.format(new Date(event.getTimeStamp()));
+ StringBuffer buf = new StringBuffer(utcTime);
+ buf.append(' ');
+ buf.append(localTime);
+ buf.append(" org.foobar - msg 1\n");
+ assertEquals(buf.toString(), result);
+ }
+
// public static Test suite() {
// TestSuite suite = new TestSuite();
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org