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 ce...@apache.org on 2003/05/14 00:32:49 UTC
cvs commit: jakarta-log4j/tests/src/java/org/apache/log4j/rolling/helpers FileNamePatternParserTestCase.java
ceki 2003/05/13 15:32:49
Modified: src/java/org/apache/log4j/rolling
SlidingWindowRollingPolicy.java
Added: src/java/org/apache/log4j/rolling/helpers
IdentityTokenConverter.java TokenConverter.java
FileNamePatternParser.java
IntegerTokenConverter.java
tests/src/java/org/apache/log4j/rolling/helpers
FileNamePatternParserTestCase.java
Log:
Work in progress on rolling
Revision Changes Path
1.1 jakarta-log4j/src/java/org/apache/log4j/rolling/helpers/IdentityTokenConverter.java
Index: IdentityTokenConverter.java
===================================================================
/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "log4j" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation. For more information on the
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
package org.apache.log4j.rolling.helpers;
/**
* @author Ceki
*
*/
public class IdentityTokenConverter extends TokenConverter {
final String str;
public IdentityTokenConverter(String str) {
super(TokenConverter.IDENTITY);
this.str = str;
}
public String convert() {
return str;
}
}
1.1 jakarta-log4j/src/java/org/apache/log4j/rolling/helpers/TokenConverter.java
Index: TokenConverter.java
===================================================================
/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "log4j" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation. For more information on the
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
package org.apache.log4j.rolling.helpers;
/**
*
* The TokenConverter offer some basic functionality for more specific token converters.
* It basically sets up the chained architecture.
*
* @author Ceki
*
*/
public class TokenConverter {
/**
* @author Ceki
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
protected class IndentityTokenConverter {
}
static final int IDENTITY = 0;
static final int INTEGER = 1;
static final int DATE = 1;
int type;
TokenConverter next;
TokenConverter(int t) {
type = t;
}
public TokenConverter getNext() {
return next;
}
public void setNext(TokenConverter next) {
this.next = next;
}
public int getType() {
return type;
}
public void setType(int i) {
type = i;
}
}
1.1 jakarta-log4j/src/java/org/apache/log4j/rolling/helpers/FileNamePatternParser.java
Index: FileNamePatternParser.java
===================================================================
/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "log4j" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation. For more information on the
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
package org.apache.log4j.rolling.helpers;
import org.apache.log4j.Logger;
/**
*
* This class helps parse file name patterns. Given a number or a date it returns
* a file name according to the file name pattern.
*
* This class is not intended to be used directly but sub-classed or wrapped.
*
* @author Ceki Gülcü
*
*/
class FileNamePatternParser {
static Logger logger = Logger.getLogger(FileNamePatternParser.class);
String pattern;
TokenConverter headTokenConverter;
protected FileNamePatternParser(String pattern) {
if (pattern == null) {
throw new IllegalArgumentException(
"The argument to constrcutor cannot be null. ");
}
this.pattern = pattern;
parse();
}
void parse() {
int lastIndex = 0;
TokenConverter tc = null;
int len = pattern.length();
while (true) {
int i = pattern.indexOf('%', lastIndex);
if (i == -1) {
String remainingStr = pattern.substring(lastIndex);
System.out.println("adding the identity token");
addTokenConverter(tc, new IdentityTokenConverter(remainingStr));
break;
} else {
// test for degenerate case where the '%' character is at the end.
if (i == (len - 1)) {
String remainingStr = pattern.substring(lastIndex);
addTokenConverter(tc, new IdentityTokenConverter(remainingStr));
break;
}
System.out.println("2adding the identity token");
tc =
addTokenConverter(
tc, new IdentityTokenConverter(pattern.substring(lastIndex, i)));
// At this stage, we can suppose that i < len -1
char nextChar = pattern.charAt(i + 1);
switch (nextChar) {
case 'i':
tc = addTokenConverter(tc, new IntegerTokenConverter());
lastIndex = i + 2;
break; // break from switch statement
case '%':
tc = addTokenConverter(tc, new IdentityTokenConverter("%"));
lastIndex = i + 2;
break;
default:
throw new IllegalArgumentException(
"The pattern[" + pattern
+ "] does not contain a valid specifer at position " + (i + 1));
}
}
}
}
TokenConverter addTokenConverter(
TokenConverter tc, TokenConverter newTokenConverter) {
if (tc == null) {
tc = headTokenConverter = newTokenConverter;
} else {
tc.next = newTokenConverter;
tc = newTokenConverter;
}
return tc;
}
protected String convert(int i) {
TokenConverter p = headTokenConverter;
StringBuffer buf = new StringBuffer();
while (p != null) {
switch (p.getType()) {
case TokenConverter.IDENTITY:
buf.append(((IdentityTokenConverter) p).convert());
break;
case TokenConverter.INTEGER:
buf.append(((IntegerTokenConverter) p).convert(i));
break;
default:
logger.error(
"Encountered an unknown TokenConverter type for pattern [" + pattern
+ "].");
}
p = p.getNext();
}
return buf.toString();
}
}
1.1 jakarta-log4j/src/java/org/apache/log4j/rolling/helpers/IntegerTokenConverter.java
Index: IntegerTokenConverter.java
===================================================================
/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "log4j" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation. For more information on the
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
package org.apache.log4j.rolling.helpers;
/**
* @author Ceki
*
*/
class IntegerTokenConverter extends TokenConverter {
public IntegerTokenConverter() {
super(TokenConverter.INTEGER);
}
public String convert(int i) {
return Integer.toString(i);
}
}
1.3 +8 -0 jakarta-log4j/src/java/org/apache/log4j/rolling/SlidingWindowRollingPolicy.java
Index: SlidingWindowRollingPolicy.java
===================================================================
RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/rolling/SlidingWindowRollingPolicy.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SlidingWindowRollingPolicy.java 5 May 2003 20:42:57 -0000 1.2
+++ SlidingWindowRollingPolicy.java 13 May 2003 22:32:49 -0000 1.3
@@ -119,6 +119,10 @@
return activeFileName;
}
+ public String getFileNamePattern() {
+ return fileNamePattern;
+ }
+
public int getMaxIndex() {
return maxIndex;
@@ -126,6 +130,10 @@
public int getMinIndex() {
return minIndex;
+ }
+
+ public void setFileNamePattern(String fnp) {
+ fileNamePattern = fnp;
}
public void setMaxIndex(int maxIndex) {
1.1 jakarta-log4j/tests/src/java/org/apache/log4j/rolling/helpers/FileNamePatternParserTestCase.java
Index: FileNamePatternParserTestCase.java
===================================================================
/*
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
*
* Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
*
* 4. The names "log4j" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
* DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation. For more information on the
* Apache Software Foundation, please see <http://www.apache.org/>.
*
*/
package org.apache.log4j.rolling.helpers;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* @author Ceki
*
*/
public class FileNamePatternParserTestCase extends TestCase {
/**
* Constructor for FileNamePatternParserTestCase.
* @param arg0
*/
public FileNamePatternParserTestCase(String arg0) {
super(arg0);
}
public void test1() {
//System.out.println("Testing [t]");
FileNamePatternParser pp = new FileNamePatternParser("t");
assertEquals("t", pp.convert(3));
//System.out.println("Testing [foo]");
pp = new FileNamePatternParser("foo");
assertEquals("foo", pp.convert(3));
//System.out.println("Testing [foo%]");
pp = new FileNamePatternParser("foo%");
assertEquals("foo%", pp.convert(3));
pp = new FileNamePatternParser("%ifoo");
assertEquals("3foo", pp.convert(3));
pp = new FileNamePatternParser("foo%ixixo");
assertEquals("foo3xixo", pp.convert(3));
pp = new FileNamePatternParser("foo%i.log");
assertEquals("foo3.log", pp.convert(3));
pp = new FileNamePatternParser("foo.%i.log");
assertEquals("foo.3.log", pp.convert(3));
pp = new FileNamePatternParser("%ifoo%");
assertEquals("3foo%", pp.convert(3));
pp = new FileNamePatternParser("%ifoo%%");
assertEquals("3foo%", pp.convert(3));
pp = new FileNamePatternParser("%%foo");
assertEquals("%foo", pp.convert(3));
}
public void test2() {
System.out.println("Testing [foo%ibar%i]");
FileNamePatternParser pp = new FileNamePatternParser("foo%ibar%i");
assertEquals("foo3bar3", pp.convert(3));
///pp = new FileNamePatternParser("%%foo");
//assertEquals("%foo", pp.convert(3));
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.addTest(new FileNamePatternParserTestCase("test1"));
suite.addTest(new FileNamePatternParserTestCase("test2"));
return suite;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-dev-help@jakarta.apache.org