sdeboy 2003/09/16 23:24:38
Modified: src/java/org/apache/log4j/chainsaw/rule RuleTest.java
src/java/org/apache/log4j/chainsaw
LoggingEventFieldResolver.java
Log:
Updated loggingeventfieldresolver and ruletest to actually process logging events.
NOTE: spaces in event fields aren't being handled correctly
Revision Changes Path
1.4 +81 -83
jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/RuleTest.java
Index: RuleTest.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/rule/RuleTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RuleTest.java 15 Sep 2003 02:20:26 -0000 1.3
+++ RuleTest.java 17 Sep 2003 06:24:38 -0000 1.4
@@ -52,9 +52,10 @@
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
-
+import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
@@ -66,11 +67,14 @@
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
-import javax.swing.JTable;
+import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
-import javax.swing.table.DefaultTableModel;
-import javax.swing.table.TableModel;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.chainsaw.LoggingEventFieldResolver;
+import org.apache.log4j.spi.LoggingEvent;
public class RuleTest extends JFrame {
@@ -86,14 +90,40 @@
* @author Scott Deboy <[EMAIL PROTECTED]>
*
*/
- private final Vector data = new Vector();
- private final Vector colnames = new Vector();
-
public RuleTest(String booleanPostFixExpression, String inFixExpression) {
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(new BorderLayout());
- JPanel fieldPanel = new JPanel(new GridLayout(8, 1));
+ final LoggingEventFieldResolver resolver =
LoggingEventFieldResolver.getInstance();
+
+ final List eventList = new ArrayList();
+
+ eventList.add(new LoggingEvent("org.apache.log4j.chainsaw",
Logger.getLogger("logger1"), System.currentTimeMillis(), Level.DEBUG, "message1", new
Exception("test")));
+ eventList.add(new LoggingEvent("org.apache.log4j.chainsaw",
Logger.getLogger("logger2"), System.currentTimeMillis(), Level.DEBUG, "message2", new
Exception("test2")));
+ eventList.add(new LoggingEvent("org.apache.log4j.net",
Logger.getLogger("logger3"), System.currentTimeMillis(), Level.DEBUG, "message3", new
Exception("test3")));
+ eventList.add(new LoggingEvent("org.apache.log4j.chainsaw",
Logger.getLogger("logger4"), System.currentTimeMillis(), Level.WARN, "message4", new
Exception("test4")));
+
+ JPanel fieldPanel = new JPanel(new GridLayout(12, 1));
+
+ fieldPanel.add(
+ new JLabel("Enter infix expression to convert to postfix: "));
+
+ final JTextField inFixTextField = new JTextField(inFixExpression);
+ fieldPanel.add(inFixTextField);
+
+ JButton inFixButton = new JButton("Convert InFix to PostFix");
+ fieldPanel.add(inFixButton);
+
+ final JTextField inFixResult = new JTextField();
+ fieldPanel.add(inFixResult);
+ inFixButton.addActionListener(
+ new AbstractAction() {
+ public void actionPerformed(ActionEvent evt) {
+ InFixToPostFix inFixConverter = new InFixToPostFix();
+ inFixResult.setText(
+ inFixConverter.convert(inFixTextField.getText()));
+ }
+ });
fieldPanel.add(
new JLabel("Enter boolean postfix expression to evaluate: "));
@@ -118,64 +148,56 @@
}
});
- fieldPanel.add(
- new JLabel("Enter infix expression to convert to postfix: "));
- final JTextField inFixTextField = new JTextField(inFixExpression);
- fieldPanel.add(inFixTextField);
+ JPanel resultsPanel = new JPanel(new BorderLayout());
- JButton inFixButton = new JButton("Convert InFix to PostFix");
- fieldPanel.add(inFixButton);
+ JButton resultsButton = new JButton("Replace fields (processes expression in
'Enter boolean postfix expression to evaluate' box)");
+ resultsPanel.add(resultsButton, BorderLayout.NORTH);
- final JTextField inFixResult = new JTextField();
- fieldPanel.add(inFixResult);
- inFixButton.addActionListener(
- new AbstractAction() {
- public void actionPerformed(ActionEvent evt) {
- InFixToPostFix inFixConverter = new InFixToPostFix();
- inFixResult.setText(
- inFixConverter.convert(inFixTextField.getText()));
- }
- });
+ final JTextArea results = new JTextArea(5, 50);
+ resultsPanel.add(results, BorderLayout.CENTER);
+ JPanel copyNotePanel = new JPanel(new GridLayout(2, 1));
+ copyNotePanel.add(new JLabel("Copy one of the lines in the replace fields box
into the "));
+ copyNotePanel.add(new JLabel("'Enter boolean postfix expression to evaluate'
box and re-evaluate"));
+ resultsPanel.add(copyNotePanel, BorderLayout.SOUTH);
+
+ resultsButton.addActionListener(
+ new AbstractAction() {
+ public void actionPerformed(ActionEvent evt) {
+ results.setText("");
+ String originalPostFix = booleanPostFixTextField.getText();
+ System.out.println("postfix is " + originalPostFix);
+ Iterator iter = eventList.iterator();
+ while (iter.hasNext()) {
+ LoggingEvent event = (LoggingEvent)iter.next();
+ StringTokenizer tokenizer = new
StringTokenizer(originalPostFix);
+ StringBuffer newPostFix = new StringBuffer();
+ String nextToken = null;
+ while (tokenizer.hasMoreElements()) {
+ nextToken = tokenizer.nextToken();
+ if (resolver.isField(nextToken)) {
+
newPostFix.append(resolver.getValue(nextToken, event) + " ");
+ } else {
+ newPostFix.append(nextToken + " ");
+ }
+ }
+ results.setText(results.getText() +
(results.getText().length()==0?"":"\n") + newPostFix.toString());
+ }
+ }
+ });
- colnames.add("level");
- colnames.add("logger");
- colnames.add("message");
- colnames.add("result");
-
- data.add(
- createEvent("DEBUG", "org.apache.log4j.chainsaw", "TEST MESSAGE 1"));
- data.add(createEvent("DEBUG", "test logger", "TEST MESSAGE 2"));
- data.add(
- createEvent("INFO", "org.apache.log4j.chainsaw", "TEST MESSAGE 3"));
- data.add(
- createEvent("INFO", "org.aache.log4j.chainsaw", "TEST MESSAGE 4"));
- data.add(createEvent("WARN", "test logger", "TEST MESSAGE 5"));
- data.add(createEvent("WARN", "test logger 2", "TEST MESSAGE 6"));
- data.add(createEvent("WARN", "test logger 2", "TEST MESSAGE 7"));
-
- TableModel tm = new EventTableModel(data, colnames);
- JPanel tablePanel = new JPanel();
- JTable table = new JTable(tm);
- tablePanel.add(table);
getContentPane().add(fieldPanel, BorderLayout.NORTH);
- getContentPane().add(tablePanel, BorderLayout.CENTER);
- }
-
- private Vector createEvent(String level, String logger, String message) {
- Vector v = new Vector();
- v.add(level);
- v.add(logger);
- v.add(message);
-
- return v;
+ getContentPane().add(resultsPanel, BorderLayout.CENTER);
}
+
+
+
public static void main(String[] args) {
RuleTest test =
new RuleTest(
- "level debug == BLAH test == logger org.apache == && ||",
- "( ( level == debug ) || ( BLAH == test ) ) && logger == org.apache");
+ "level debug ~= BLAH test == logger logger1 == && ||",
+ "( ( level ~= debug ) || ( BLAH == test ) ) && logger == logger1");
test.pack();
test.setVisible(true);
}
@@ -223,8 +245,8 @@
System.out.println(
"part text match op " + firstParam + ".." + secondParam);
- return ((secondParam != null) && (secondParam.indexOf(firstParam) > -1))
- ? true : false;
+ return ((secondParam != null && firstParam != null) &&
+ (secondParam.toLowerCase().indexOf(firstParam.toLowerCase()) > -1));
}
}
@@ -232,23 +254,10 @@
boolean evaluate(String firstParam, String secondParam) {
System.out.println("text match op " + firstParam + ".." + secondParam);
- boolean result = false;
-
//second parameter is field name
//first parameter is value
//fake out logic here to examine passed in parameters and value retrieval
from table
- if (
- (secondParam.equalsIgnoreCase("level")
- && firstParam.equalsIgnoreCase("debug"))
- || (secondParam.equalsIgnoreCase("logger")
- && firstParam.equalsIgnoreCase("org.apache"))) {
- result = true;
- } else {
- result = (((secondParam != null) && secondParam.equals(firstParam))
- ? true : false);
- }
-
- return result;
+ return ((secondParam != null) && secondParam.equals(firstParam));
}
}
@@ -421,17 +430,6 @@
stack.clear();
return postfix.toString();
- }
- }
-
- class EventTableModel extends DefaultTableModel {
- Vector data;
- Vector colnames;
-
- EventTableModel(Vector data, Vector colnames) {
- super(data, colnames);
- this.data = data;
- this.colnames = colnames;
}
}
}
1.4 +34 -18
jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggingEventFieldResolver.java
Index: LoggingEventFieldResolver.java
===================================================================
RCS file:
/home/cvs/jakarta-log4j/src/java/org/apache/log4j/chainsaw/LoggingEventFieldResolver.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- LoggingEventFieldResolver.java 17 Sep 2003 04:03:22 -0000 1.3
+++ LoggingEventFieldResolver.java 17 Sep 2003 06:24:38 -0000 1.4
@@ -84,8 +84,9 @@
* NOTE: the values for the 'keyName' portion of the MDC and PROP mappings must
* be an exact match to the key in the hashTable (case sensitive).
*
- * If the passed-in field is null or does not match an entry in the above-described
- * mapping, an empty string is returned.
+ * If the passed-in field is null, an empty string is returned.
+ * If the passed-in field doesn't match an entry in the above-described
+ * mapping, the passed-in field is returned.
*
* @author Scott Deboy <[EMAIL PROTECTED]>
* @author Paul Smith <[EMAIL PROTECTED]>
@@ -102,41 +103,56 @@
return resolver;
}
+ public boolean isField(String fieldName) {
+ if (fieldName == null) {
+ return false;
+ }
+ String upperField = fieldName.toUpperCase();
+
+ return (upperField != null && ("LOGGER".equals(upperField) ||
"LEVEL".equals(upperField) ||
+ "CLASS".equals(upperField) || "FILE".equals(upperField) ||
"LINE".equals(upperField) ||
+ "METHOD".equals(upperField) || "MSG".equals(upperField) ||
"NDC".equals(upperField) ||
+ "EXCEPTION".equals(upperField) || "TIMESTAMP".equals(upperField) ||
"THREAD".equals(upperField) ||
+ upperField.startsWith("MDC.") || upperField.startsWith("PROP.")));
+ }
+
public Object getValue(String fieldName, LoggingEvent event) {
if (fieldName == null) {
return "";
}
- String lowerProp = fieldName.toUpperCase();
+ String upperField = fieldName.toUpperCase();
- if ("LOGGER".equals(fieldName)) {
+ if ("LOGGER".equals(upperField)) {
return event.getLoggerName();
- } else if ("LEVEL".equals(fieldName)) {
+ } else if ("LEVEL".equals(upperField)) {
return event.getLevel();
- } else if ("CLASS".equals(fieldName)) {
+ } else if ("CLASS".equals(upperField)) {
return event.getLocationInformation().getClassName();
- } else if ("FILE".equals(fieldName)) {
+ } else if ("FILE".equals(upperField)) {
return event.getLocationInformation().getFileName();
- } else if ("LINE".equals(fieldName)) {
+ } else if ("LINE".equals(upperField)) {
return event.getLocationInformation().getLineNumber();
- } else if ("METHOD".equals(fieldName)) {
+ } else if ("METHOD".equals(upperField)) {
return event.getLocationInformation().getMethodName();
- } else if ("MSG".equals(fieldName)) {
+ } else if ("MSG".equals(upperField)) {
return event.getMessage();
- } else if ("NDC".equals(fieldName)) {
+ } else if ("NDC".equals(upperField)) {
return event.getNDC();
- } else if ("EXCEPTION".equals(fieldName)) {
+ } else if ("EXCEPTION".equals(upperField)) {
return event.getThrowableInformation();
- } else if ("TIMESTAMP".equals(fieldName)) {
+ } else if ("TIMESTAMP".equals(upperField)) {
return new Long(event.timeStamp);
- } else if ("THREAD".equals(fieldName)) {
+ } else if ("THREAD".equals(upperField)) {
return event.getThreadName();
- } else if (fieldName.startsWith("MDC.")) {
+ } else if (upperField.startsWith("MDC.")) {
+ //note: need to use actual fieldname since case matters
return event.getMDC(fieldName.substring(4));
- } else if (fieldName.startsWith("PROP.")) {
+ } else if (upperField.startsWith("PROP.")) {
+ //note: need to use actual fieldname since case matters
return event.getProperty(fieldName.substring(5));
}
-
- return "";
+ //there wasn't a match, so just return the passed-in name
+ return fieldName;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]