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 2005/01/27 22:37:48 UTC
cvs commit: logging-log4j/tests/src/java/org/apache/log4j/lbel EventEvaluationTest.java TokenStreamTest.java
ceki 2005/01/27 13:37:48
Modified: src/java/org/apache/log4j/lbel/comparator
LoggerComparator.java MessageComparator.java
src/java/org/apache/log4j/lbel LBELEventEvaluator.java
TokenStream.java
tests/src/java/org/apache/log4j/lbel
EventEvaluationTest.java TokenStreamTest.java
Log:
Further tests and improvemetns. Expressions involving event levels, logger names and message contents seem to work nicely.
Revision Changes Path
1.3 +6 -2 logging-log4j/src/java/org/apache/log4j/lbel/comparator/LoggerComparator.java
Index: LoggerComparator.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/lbel/comparator/LoggerComparator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LoggerComparator.java 27 Jan 2005 19:53:10 -0000 1.2
+++ LoggerComparator.java 27 Jan 2005 21:37:48 -0000 1.3
@@ -52,14 +52,18 @@
public boolean compare(LoggingEvent event) {
if(operator.isRegex()) {
- boolean match = matcher.matches(event.getLoggerName(), rightSidePattern);
+ boolean match = matcher.contains(event.getLoggerName(), rightSidePattern);
if(operator.getCode() == Operator.REGEX_MATCH) {
return match;
} else {
return !match;
}
}
-
+
+ if(operator.getCode() == Operator.CHILDOF) {
+ return event.getLoggerName().startsWith(rightSide);
+ }
+
int compResult = event.getLoggerName().compareTo(rightSide);
switch(operator.getCode()) {
case Operator.EQUAL: return compResult == 0;
1.3 +6 -2 logging-log4j/src/java/org/apache/log4j/lbel/comparator/MessageComparator.java
Index: MessageComparator.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/lbel/comparator/MessageComparator.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- MessageComparator.java 27 Jan 2005 19:53:10 -0000 1.2
+++ MessageComparator.java 27 Jan 2005 21:37:48 -0000 1.3
@@ -48,7 +48,7 @@
Pattern rightSidePattern;
Perl5Matcher matcher;
- public MessageComparator(Operator operator, String rightSide)
+ public MessageComparator(final Operator operator, String rightSide)
throws ScanError {
this.operator = operator;
this.rightSide = rightSide;
@@ -68,7 +68,7 @@
public boolean compare(LoggingEvent event) {
if (operator.isRegex()) {
boolean match =
- matcher.matches(event.getRenderedMessage(), rightSidePattern);
+ matcher.contains(event.getRenderedMessage(), rightSidePattern);
if (operator.getCode() == Operator.REGEX_MATCH) {
return match;
} else {
@@ -102,4 +102,8 @@
throw new IllegalStateException(
"Unreachable state reached, operator " + operator);
}
+
+ public String toString() {
+ return "MessageComparator("+operator+", "+rightSide+")";
+ }
}
1.2 +4 -0 logging-log4j/src/java/org/apache/log4j/lbel/LBELEventEvaluator.java
Index: LBELEventEvaluator.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/lbel/LBELEventEvaluator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- LBELEventEvaluator.java 27 Jan 2005 19:25:08 -0000 1.1
+++ LBELEventEvaluator.java 27 Jan 2005 21:37:48 -0000 1.2
@@ -36,6 +36,10 @@
return evaluate(top, event);
}
+ void dumpSyntaxTree(String prefix) {
+ top.leftFirstDump(prefix);
+ }
+
private boolean evaluate(Node node, LoggingEvent event) {
int type = node.getType();
boolean left;
1.4 +1 -2 logging-log4j/src/java/org/apache/log4j/lbel/TokenStream.java
Index: TokenStream.java
===================================================================
RCS file: /home/cvs/logging-log4j/src/java/org/apache/log4j/lbel/TokenStream.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TokenStream.java 27 Jan 2005 19:31:38 -0000 1.3
+++ TokenStream.java 27 Jan 2005 21:37:48 -0000 1.4
@@ -62,7 +62,7 @@
tokenizer.wordChars('a', 'z');
tokenizer.wordChars('A', 'Z');
tokenizer.wordChars('0', '9');
-
+
tokenizer.quoteChar('"');
tokenizer.quoteChar('\'');
tokenizer.parseNumbers();
@@ -128,7 +128,6 @@
current = new Token(Token.OPERATOR, "!=");
} else if (token2 == '~') {
current = new Token(Token.OPERATOR, "!~");
- tokenizer.pushBack();
} else {
throw new ScanError("Unrecogized token "+token+". The '!' character must be followed by = or '~'");
}
1.2 +71 -1 logging-log4j/tests/src/java/org/apache/log4j/lbel/EventEvaluationTest.java
Index: EventEvaluationTest.java
===================================================================
RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/lbel/EventEvaluationTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EventEvaluationTest.java 27 Jan 2005 19:25:08 -0000 1.1
+++ EventEvaluationTest.java 27 Jan 2005 21:37:48 -0000 1.2
@@ -16,6 +16,7 @@
package org.apache.log4j.lbel;
+
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
@@ -24,6 +25,7 @@
import org.apache.log4j.spi.LoggingEvent;
+
public class EventEvaluationTest extends TestCase {
LoggingEvent event;
EventEvaluator evaluator;
@@ -52,8 +54,76 @@
evaluator = new LBELEventEvaluator("level = INFO");
assertTrue(evaluator.evaluate(event));
}
-
+
+ public void testMessage() throws ScanError {
+ evaluator = new LBELEventEvaluator("message = 'hello world'");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message = hello");
+ assertTrue(!evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message != hello");
+ assertTrue(evaluator.evaluate(event));
+
+
+ evaluator = new LBELEventEvaluator("message > hello");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message >= hello");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message < hello");
+ assertTrue(!evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message <= hello");
+ assertTrue(!evaluator.evaluate(event));
+ }
+
+ public void testRegexMessage() throws Exception, ScanError {
+ evaluator = new LBELEventEvaluator("message ~ 'hello'");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message ~ 'h[a-z]* world'");
+ assertTrue(evaluator.evaluate(event));
+
+ // the following test cannot be run because of a bug in the way
+ // java.io.StreamTokenizer incorrectly interprets the '\' character within quotes
+ // evaluator = new LBELEventEvaluator("message ~ 'h\\w* world'");
+ //assertTrue(evaluator.evaluate(event));
+
+ LBELEventEvaluator evaluator = new LBELEventEvaluator("message !~ 'x'");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("message !~ 'x[a-z]* world'");
+ assertTrue(evaluator.evaluate(event));
+ }
+ public void testLogger() throws Exception, ScanError {
+ evaluator = new LBELEventEvaluator("logger = org.wombat");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger = org.wombat.x");
+ assertTrue(!evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger != org.wombat.x");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger < org.wombat.x");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger <= org.wombat.x");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger > org");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger >= org");
+ assertTrue(evaluator.evaluate(event));
+
+ evaluator = new LBELEventEvaluator("logger CHILDOF org");
+ assertTrue(evaluator.evaluate(event));
+ }
+
public static Test XXsuite() {
TestSuite suite = new TestSuite();
//suite.addTest(new ParserTest("testAndOr"));
1.3 +35 -0 logging-log4j/tests/src/java/org/apache/log4j/lbel/TokenStreamTest.java
Index: TokenStreamTest.java
===================================================================
RCS file: /home/cvs/logging-log4j/tests/src/java/org/apache/log4j/lbel/TokenStreamTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TokenStreamTest.java 27 Jan 2005 19:25:08 -0000 1.2
+++ TokenStreamTest.java 27 Jan 2005 21:37:48 -0000 1.3
@@ -90,6 +90,41 @@
assertEquals(Token.EOF, t.getType());
}
+ public void testRegex() throws IOException, ScanError {
+ StringReader sr = new StringReader(" time ~ x");
+ TokenStream ts = new TokenStream(sr);
+
+ ts.next(); t = ts.getCurrent();
+ assertEquals(Token.LITERAL, t.getType());
+ assertEquals("time", t.getValue());
+
+ ts.next(); t = ts.getCurrent();
+ assertEquals(Token.OPERATOR, t.getType());
+ assertEquals("~", t.getValue());
+
+ ts.next(); t = ts.getCurrent();
+ assertEquals(Token.LITERAL, t.getType());
+ assertEquals("x", t.getValue());
+ }
+
+ public void testNotRegex() throws IOException, ScanError {
+ StringReader sr = new StringReader(" t !~ x");
+ TokenStream ts = new TokenStream(sr);
+
+ ts.next(); t = ts.getCurrent();
+ assertEquals(Token.LITERAL, t.getType());
+ assertEquals("t", t.getValue());
+
+ ts.next(); t = ts.getCurrent();
+ assertEquals(Token.OPERATOR, t.getType());
+ assertEquals("!~", t.getValue());
+
+ ts.next(); t = ts.getCurrent();
+ assertEquals(Token.LITERAL, t.getType());
+ assertEquals("x", t.getValue());
+ }
+
+
public void testFull() throws IOException, ScanError {
StringReader sr = new StringReader(" time >= 19 NOT \"hello world\" ");
TokenStream ts = new TokenStream(sr);
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org