You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2017/11/20 20:34:26 UTC
[1/4] logging-chainsaw git commit: Try to upgrade to Log4j 2
Repository: logging-chainsaw
Updated Branches:
refs/heads/log4j-2 [created] deb3b3c04
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/RendererSupport.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/RendererSupport.java b/src/main/java/org/apache/log4j/spi/RendererSupport.java
new file mode 100644
index 0000000..9d69faa
--- /dev/null
+++ b/src/main/java/org/apache/log4j/spi/RendererSupport.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.log4j.spi;
+
+import org.apache.log4j.or.ObjectRenderer;
+import org.apache.log4j.or.RendererMap;
+
+
+public interface RendererSupport {
+
+ public
+ RendererMap getRendererMap();
+
+ public
+ void setRenderer(Class renderedClass, ObjectRenderer renderer);
+
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/Thresholdable.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/Thresholdable.java b/src/main/java/org/apache/log4j/spi/Thresholdable.java
index 222345f..b85bfb2 100644
--- a/src/main/java/org/apache/log4j/spi/Thresholdable.java
+++ b/src/main/java/org/apache/log4j/spi/Thresholdable.java
@@ -17,7 +17,7 @@
package org.apache.log4j.spi;
-import org.apache.log4j.Level;
+import org.apache.logging.log4j.Level;
/**
* An interface that defines the required methods for supporting the
@@ -32,7 +32,7 @@ import org.apache.log4j.Level;
*/
public interface Thresholdable {
/**
- * Sets the component theshold to the given level.
+ * Sets the component threshold to the given level.
*
* @param level The threshold level events must equal or be greater
* than before further processing can be done.
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/varia/ListModelAppender.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/varia/ListModelAppender.java b/src/main/java/org/apache/log4j/varia/ListModelAppender.java
index ccbc9be..55bea90 100644
--- a/src/main/java/org/apache/log4j/varia/ListModelAppender.java
+++ b/src/main/java/org/apache/log4j/varia/ListModelAppender.java
@@ -17,8 +17,8 @@
package org.apache.log4j.varia;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
import javax.swing.DefaultListModel;
import javax.swing.ListModel;
@@ -32,17 +32,17 @@ import javax.swing.ListModel;
* @author Paul Smith (psmith@apache.org)
*
*/
-public final class ListModelAppender extends AppenderSkeleton {
+public final class ListModelAppender extends AbstractAppender {
/**
* Default list model.
*/
- private final DefaultListModel model = new DefaultListModel();
+ private final DefaultListModel<LogEvent> model = new DefaultListModel<>();
/**
* Constructs a ListModelAppender.
*/
public ListModelAppender() {
- super(true);
+ super("ListModelAppender", null, null);
}
/**
* Returns a reference to the ListModel that contains all the LoggingEvents
@@ -54,13 +54,11 @@ public final class ListModelAppender extends AppenderSkeleton {
return model;
}
- /** {@inheritDoc} */
- protected void append(final LoggingEvent event) {
+ public void append(final LogEvent event) {
model.addElement(event);
}
- /** {@inheritDoc} */
- public void close() {
+ public void stop() {
clearModel();
}
@@ -71,9 +69,4 @@ public final class ListModelAppender extends AppenderSkeleton {
model.clear();
}
- /** {@inheritDoc} */
- public boolean requiresLayout() {
- return false;
- }
-
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/xml/SAXErrorHandler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/xml/SAXErrorHandler.java b/src/main/java/org/apache/log4j/xml/SAXErrorHandler.java
new file mode 100644
index 0000000..bd96582
--- /dev/null
+++ b/src/main/java/org/apache/log4j/xml/SAXErrorHandler.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.xml;
+
+import org.apache.logging.log4j.status.StatusLogger;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.SAXParseException;
+
+public class SAXErrorHandler implements ErrorHandler {
+
+ private final StatusLogger statusLogger = StatusLogger.getLogger();
+
+ public
+ void error(final SAXParseException ex) {
+ emitMessage("Continuable parsing error ", ex);
+ }
+
+ public
+ void fatalError(final SAXParseException ex) {
+ emitMessage("Fatal parsing error ", ex);
+ }
+
+ public
+ void warning(final SAXParseException ex) {
+ emitMessage("Parsing warning ", ex);
+ }
+
+ private void emitMessage(final String msg, final SAXParseException ex) {
+ statusLogger.warn(msg +ex.getLineNumber()+" and column "
+ +ex.getColumnNumber());
+ statusLogger.warn(ex.getMessage(), ex.getException());
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
index f9d8125..cba9295 100644
--- a/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/UtilLoggingXMLDecoder.java
@@ -37,13 +37,11 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.helpers.UtilLoggingLevel;
import org.apache.log4j.spi.Decoder;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.ThrowableInformation;
-import org.apache.log4j.spi.LocationInfo;
+import org.apache.logging.log4j.core.LogEvent;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -77,7 +75,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
/**
* Additional properties.
*/
- private Map additionalProperties = new HashMap();
+ private Map<String, String> additionalProperties = new HashMap<>();
/**
* Partial event.
*/
@@ -120,17 +118,17 @@ public class UtilLoggingXMLDecoder implements Decoder {
/**
* Sets an additionalProperty map, where each Key/Value pair is
- * automatically added to each LoggingEvent as it is decoded.
+ * automatically added to each LogEvent as it is decoded.
*
* This is useful, say, to include the source file name of the Logging events
* @param properties additional properties
*/
- public void setAdditionalProperties(final Map properties) {
+ public void setAdditionalProperties(final Map<String, String> properties) {
this.additionalProperties = properties;
}
/**
- * Converts the LoggingEvent data in XML string format into an actual
+ * Converts the LogEvent data in XML string format into an actual
* XML Document class instance.
* @param data XML fragment
* @return dom document
@@ -180,7 +178,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
* @return Vector of LoggingEvents
* @throws IOException if IO error during processing.
*/
- public Vector decode(final URL url) throws IOException {
+ public Vector<LogEvent> decode(final URL url) throws IOException {
LineNumberReader reader;
boolean isZipFile = url.getPath().toLowerCase().endsWith(".zip");
InputStream inputStream;
@@ -199,10 +197,10 @@ public class UtilLoggingXMLDecoder implements Decoder {
} else {
reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
}
- Vector v = new Vector();
+ Vector<LogEvent> v = new Vector<>();
String line;
- Vector events;
+ Vector<LogEvent> events;
try {
while ((line = reader.readLine()) != null) {
StringBuffer buffer = new StringBuffer(line);
@@ -233,7 +231,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
* @param document to decode events from
* @return Vector of LoggingEvents
*/
- public Vector decodeEvents(final String document) {
+ public Vector<LogEvent> decodeEvents(final String document) {
if (document != null) {
@@ -279,22 +277,22 @@ public class UtilLoggingXMLDecoder implements Decoder {
/**
* Converts the string data into an XML Document, and then soaks out the
- * relevant bits to form a new LoggingEvent instance which can be used
+ * relevant bits to form a new LogEvent instance which can be used
* by any Log4j element locally.
* @param data XML fragment
- * @return a single LoggingEvent or null
+ * @return a single LogEvent or null
*/
- public LoggingEvent decode(final String data) {
+ public LogEvent decode(final String data) {
Document document = parse(data);
if (document == null) {
return null;
}
- Vector events = decodeEvents(document);
+ Vector<LogEvent> events = decodeEvents(document);
if (events.size() > 0) {
- return (LoggingEvent) events.firstElement();
+ return events.firstElement();
}
return null;
@@ -305,8 +303,8 @@ public class UtilLoggingXMLDecoder implements Decoder {
* @param document XML document
* @return Vector of LoggingEvents
*/
- private Vector decodeEvents(final Document document) {
- Vector events = new Vector();
+ private Vector<LogEvent> decodeEvents(final Document document) {
+ Vector<LogEvent> events = new Vector<>();
NodeList eventList = document.getElementsByTagName("record");
@@ -325,7 +323,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
String methodName = null;
String fileName = null;
String lineNumber = null;
- Hashtable properties = new Hashtable();
+ Hashtable<String, String> properties = new Hashtable<>();
//format of date: 2003-05-04T11:04:52
//ignore date or set as a property? using millis in constructor instead
@@ -372,7 +370,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
}
if (tagName.equalsIgnoreCase("exception")) {
- ArrayList exceptionList = new ArrayList();
+ ArrayList<String> exceptionList = new ArrayList<>();
NodeList exList = list.item(y).getChildNodes();
int exlistLength = exList.getLength();
@@ -394,35 +392,33 @@ public class UtilLoggingXMLDecoder implements Decoder {
}
}
if (exceptionList.size() > 0) {
- exception =
- (String[]) exceptionList.toArray(new String[exceptionList.size()]);
+ exception = exceptionList.toArray(new String[exceptionList.size()]);
}
}
}
- /**
+ /*
* We add all the additional properties to the properties
* hashtable. Override properties that already exist
*/
if (additionalProperties.size() > 0) {
if (properties == null) {
- properties = new Hashtable(additionalProperties);
+ properties = new Hashtable<String, String>(additionalProperties);
}
- Iterator i = additionalProperties.entrySet().iterator();
- while (i.hasNext()) {
- Map.Entry e = (Map.Entry) i.next();
+ for (Object o : additionalProperties.entrySet()) {
+ Map.Entry e = (Map.Entry)o;
properties.put(e.getKey(), e.getValue());
}
}
- LocationInfo info;
+ StackTraceElement info;
if ((fileName != null)
|| (className != null)
|| (methodName != null)
|| (lineNumber != null)) {
- info = new LocationInfo(fileName, className, methodName, lineNumber);
+ info = new StackTraceElement(fileName, className, methodName, Integer.parseInt(lineNumber));
} else {
- info = LocationInfo.NA_LOCATION_INFO;
+ info = null;
}
ThrowableInformation throwableInfo = null;
@@ -430,7 +426,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
throwableInfo = new ThrowableInformation(exception);
}
- LoggingEvent loggingEvent = new LoggingEvent(null,
+ LogEvent loggingEvent = new LogEvent(null,
logger, timeStamp, level, message,
threadName,
throwableInfo,
@@ -450,7 +446,7 @@ public class UtilLoggingXMLDecoder implements Decoder {
* @return text content of all text or CDATA children of node.
*/
private String getCData(final Node n) {
- StringBuffer buf = new StringBuffer();
+ StringBuilder buf = new StringBuilder();
NodeList nl = n.getChildNodes();
for (int x = 0; x < nl.getLength(); x++) {
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/xml/XMLDecoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/xml/XMLDecoder.java b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
index 8ced851..dd9ca36 100644
--- a/src/main/java/org/apache/log4j/xml/XMLDecoder.java
+++ b/src/main/java/org/apache/log4j/xml/XMLDecoder.java
@@ -36,12 +36,13 @@ import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.spi.Decoder;
-import org.apache.log4j.spi.LocationInfo;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.ThrowableInformation;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -49,13 +50,13 @@ import org.xml.sax.InputSource;
/**
- * Decodes Logging Events in XML formated into elements that are used by
+ * Decodes Log4j 1.2 XML formatted log events into elements that are used by
* Chainsaw.
*
* This decoder can process a collection of log4j:event nodes ONLY
* (no XML declaration nor eventSet node)
*
- * NOTE: Only a single LoggingEvent is returned from the decode method
+ * NOTE: Only a single LogEvent is returned from the decode method
* even though the DTD supports multiple events nested in an eventSet.
*
* NOTE: This class has been created on the assumption that all XML log files
@@ -94,7 +95,7 @@ public class XMLDecoder implements Decoder {
/**
* Additional properties.
*/
- private Map additionalProperties = new HashMap();
+ private Map<String, String> additionalProperties = new HashMap<>();
/**
* Partial event.
*/
@@ -123,7 +124,6 @@ public class XMLDecoder implements Decoder {
try {
docBuilder = dbf.newDocumentBuilder();
docBuilder.setErrorHandler(new SAXErrorHandler());
- docBuilder.setEntityResolver(new Log4jEntityResolver());
} catch (ParserConfigurationException pce) {
System.err.println("Unable to get document builder");
}
@@ -131,17 +131,17 @@ public class XMLDecoder implements Decoder {
/**
* Sets an additionalProperty map, where each Key/Value pair is
- * automatically added to each LoggingEvent as it is decoded.
+ * automatically added to each LogEvent as it is decoded.
*
* This is useful, say, to include the source file name of the Logging events
* @param properties additional properties
*/
- public void setAdditionalProperties(final Map properties) {
+ public void setAdditionalProperties(final Map<String, String> properties) {
this.additionalProperties = properties;
}
/**
- * Converts the LoggingEvent data in XML string format into an actual
+ * Converts the LogEvent data in XML string format into an actual
* XML Document class instance.
* @param data XML fragment
* @return dom document
@@ -158,7 +158,7 @@ public class XMLDecoder implements Decoder {
// causes Crimson to barf. The Log4jEntityResolver only cares
// about the "log4j.dtd" ending.
- /**
+ /*
* resetting the length of the StringBuffer is dangerous, particularly
* on some JDK 1.4 impls, there's a known Bug that causes a memory leak
*/
@@ -184,7 +184,7 @@ public class XMLDecoder implements Decoder {
* @return Vector of LoggingEvents
* @throws IOException if IO error during processing.
*/
- public Vector decode(final URL url) throws IOException {
+ public Vector<LogEvent> decode(final URL url) throws IOException {
LineNumberReader reader;
boolean isZipFile = url.getPath().toLowerCase().endsWith(".zip");
InputStream inputStream;
@@ -204,10 +204,10 @@ public class XMLDecoder implements Decoder {
reader = new LineNumberReader(new InputStreamReader(inputStream, ENCODING));
}
- Vector v = new Vector();
+ Vector<LogEvent> v = new Vector<>();
String line;
- Vector events;
+ Vector<LogEvent> events;
try {
while ((line = reader.readLine()) != null) {
StringBuffer buffer = new StringBuffer(line);
@@ -238,7 +238,7 @@ public class XMLDecoder implements Decoder {
* @param document to decode events from
* @return Vector of LoggingEvents
*/
- public Vector decodeEvents(final String document) {
+ public Vector<LogEvent> decodeEvents(final String document) {
if (document != null) {
if (document.trim().equals("")) {
return null;
@@ -281,12 +281,12 @@ public class XMLDecoder implements Decoder {
/**
* Converts the string data into an XML Document, and then soaks out the
- * relevant bits to form a new LoggingEvent instance which can be used
+ * relevant bits to form a new LogEvent instance which can be used
* by any Log4j element locally.
* @param data XML fragment
- * @return a single LoggingEvent or null
+ * @return a single LogEvent or null
*/
- public LoggingEvent decode(final String data) {
+ public LogEvent decode(final String data) {
Document document = parse(data);
if (document == null) {
@@ -296,7 +296,7 @@ public class XMLDecoder implements Decoder {
Vector events = decodeEvents(document);
if (events.size() > 0) {
- return (LoggingEvent) events.firstElement();
+ return (LogEvent) events.firstElement();
}
return null;
@@ -307,8 +307,8 @@ public class XMLDecoder implements Decoder {
* @param document XML document
* @return Vector of LoggingEvents
*/
- private Vector decodeEvents(final Document document) {
- Vector events = new Vector();
+ private Vector<LogEvent> decodeEvents(final Document document) {
+ Vector<LogEvent> events = new Vector<>();
Logger logger;
long timeStamp;
@@ -335,7 +335,7 @@ public class XMLDecoder implements Decoder {
if (eventNode.getNodeType() != Node.ELEMENT_NODE) {
continue;
}
- logger = Logger.getLogger(eventNode.getAttributes().getNamedItem("logger").getNodeValue());
+ logger = LogManager.getLogger(eventNode.getAttributes().getNamedItem("logger").getNodeValue());
timeStamp = Long.parseLong(eventNode.getAttributes().getNamedItem("timestamp").getNodeValue());
level = Level.toLevel(eventNode.getAttributes().getNamedItem("level").getNodeValue());
threadName = eventNode.getAttributes().getNamedItem("thread").getNodeValue();
@@ -433,21 +433,21 @@ public class XMLDecoder implements Decoder {
}
}
- LocationInfo info;
+ StackTraceElement info;
if ((fileName != null)
|| (className != null)
|| (methodName != null)
|| (lineNumber != null)) {
- info = new LocationInfo(fileName, className, methodName, lineNumber);
+ info = new StackTraceElement(fileName, className, methodName, Integer.parseInt(lineNumber));
} else {
- info = LocationInfo.NA_LOCATION_INFO;
+ info = null;
}
- ThrowableInformation throwableInfo = null;
+ ThrowableProxy throwableInfo = null;
if (exception != null) {
- throwableInfo = new ThrowableInformation(exception);
+ throwableInfo = new ThrowableProxy(exception);
}
- LoggingEvent loggingEvent = new LoggingEvent(null,
+ LogEvent loggingEvent = new Log4jLogEvent(null,
logger, timeStamp, level, message,
threadName,
throwableInfo,
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
----------------------------------------------------------------------
diff --git a/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java b/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
deleted file mode 100644
index f15700d..0000000
--- a/src/test/java/org/apache/log4j/rewrite/RewriteAppenderTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.log4j.rewrite;
-
-import junit.framework.*;
-import org.apache.log4j.*;
-import org.apache.log4j.util.Compare;
-import org.apache.log4j.xml.*;
-
-import java.io.InputStream;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.TreeMap;
-import java.util.Hashtable;
-import javax.xml.parsers.*;
-import org.w3c.dom.*;
-
-public class RewriteAppenderTest extends TestCase {
- public RewriteAppenderTest(final String name) {
- super(name);
- }
-
- public void setUp() {
- LogManager.getLoggerRepository().resetConfiguration();
- Hashtable context = MDC.getContext();
- if (context != null) {
- context.clear();
- }
- }
-
- public void tearDown() {
- LogManager.getLoggerRepository().shutdown();
- }
-
- public void configure(final String resourceName) throws Exception {
- InputStream is = RewriteAppenderTest.class.getResourceAsStream(resourceName);
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- factory.setNamespaceAware(false);
- DocumentBuilder builder = factory.newDocumentBuilder();
- Document doc = builder.parse(is);
- DOMConfigurator.configure(doc.getDocumentElement());
- }
-
-
- public void testMapPolicy() throws Exception {
- configure("map.xml");
- Logger logger = Logger.getLogger(RewriteAppenderTest.class);
- logger.info("Message 0");
- MDC.put("p1", "Hola");
-
- Map msg = new TreeMap();
- msg.put("p1", "Hello");
- msg.put("p2", "World");
- msg.put("x1", "Mundo");
- logger.info(msg);
- msg.put("message", "Message 1");
- logger.info(msg);
- assertTrue(Compare.compare(RewriteAppenderTest.class, "temp", "map.log"));
- }
-
- private static class BaseBean {
- private final Object p2;
- private final Object x1;
-
- public BaseBean(final Object p2,
- final Object x1) {
- this.p2 = p2;
- this.x1 = x1;
- }
-
- public Object getP2() {
- return p2;
- }
-
- public Object getX1() {
- return x1;
- }
-
- public String toString() {
- return "I am bean.";
- }
- }
-
- private static class MessageBean extends BaseBean {
- private final Object msg;
-
- public MessageBean(final Object msg,
- final Object p2,
- final Object x1) {
- super(p2, x1);
- this.msg = msg;
- }
-
- public Object getMessage() {
- return msg;
- }
- }
-
- public void testReflectionPolicy() throws Exception {
- configure("reflection.xml");
- Logger logger = Logger.getLogger(RewriteAppenderTest.class);
- logger.info("Message 0");
- logger.info(new BaseBean("Hello", "World" ));
- MDC.put("p1", "Hola");
- MDC.put("p2", "p2");
- logger.info(new MessageBean("Welcome to The Hub", "Hello", "World" ));
- assertTrue(Compare.compare(RewriteAppenderTest.class, "temp", "reflection.log"));
- }
-
- public void testPropertyPolicy() throws Exception {
- configure("property.xml");
- Logger logger = Logger.getLogger(RewriteAppenderTest.class);
- logger.info("Message 0");
- MDC.put("p1", "Hola");
- logger.info("Message 1");
- assertTrue(Compare.compare(RewriteAppenderTest.class, "temp", "property.log"));
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/resources/org/apache/log4j/rewrite/map.log
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/log4j/rewrite/map.log b/src/test/resources/org/apache/log4j/rewrite/map.log
deleted file mode 100644
index 3ce933f..0000000
--- a/src/test/resources/org/apache/log4j/rewrite/map.log
+++ /dev/null
@@ -1,3 +0,0 @@
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1: p2: Message 0
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hello p2:World {p1=Hello, p2=World, x1=Mundo}
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hello p2:World Message 1
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/resources/org/apache/log4j/rewrite/map.xml
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/log4j/rewrite/map.xml b/src/test/resources/org/apache/log4j/rewrite/map.xml
deleted file mode 100644
index 7cb60b7..0000000
--- a/src/test/resources/org/apache/log4j/rewrite/map.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
- <appender name="F1" class="org.apache.log4j.FileAppender">
- <param name="file" value="temp"/>
- <param name="append" value="false"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
- </layout>
- </appender>
-
-
- <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
- <appender-ref ref="F1"/>
- <rewritePolicy class="org.apache.log4j.rewrite.MapRewritePolicy"/>
- </appender>
-
- <root>
- <level value ="debug" />
- <appender-ref ref="A1" />
- </root>
-
-</log4j:configuration>
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/resources/org/apache/log4j/rewrite/property.log
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/log4j/rewrite/property.log b/src/test/resources/org/apache/log4j/rewrite/property.log
deleted file mode 100644
index 9aa2c49..0000000
--- a/src/test/resources/org/apache/log4j/rewrite/property.log
+++ /dev/null
@@ -1,2 +0,0 @@
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hello p2:World Message 0
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hola p2:World Message 1
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/resources/org/apache/log4j/rewrite/property.xml
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/log4j/rewrite/property.xml b/src/test/resources/org/apache/log4j/rewrite/property.xml
deleted file mode 100644
index 13a04f8..0000000
--- a/src/test/resources/org/apache/log4j/rewrite/property.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
- <appender name="F1" class="org.apache.log4j.FileAppender">
- <param name="file" value="temp"/>
- <param name="append" value="false"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
- </layout>
- </appender>
-
-
- <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
- <appender-ref ref="F1"/>
- <rewritePolicy class="org.apache.log4j.rewrite.PropertyRewritePolicy">
- <param name="properties" value="p1=Hello,p2=World,x1=3.1415"/>
- </rewritePolicy>
- </appender>
-
- <root>
- <level value ="debug" />
- <appender-ref ref="A1" />
- </root>
-
-</log4j:configuration>
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/resources/org/apache/log4j/rewrite/reflection.log
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/log4j/rewrite/reflection.log b/src/test/resources/org/apache/log4j/rewrite/reflection.log
deleted file mode 100644
index da0b52f..0000000
--- a/src/test/resources/org/apache/log4j/rewrite/reflection.log
+++ /dev/null
@@ -1,3 +0,0 @@
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1: p2: Message 0
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1: p2:Hello I am bean.
-INFO org.apache.log4j.rewrite.RewriteAppenderTest - p1:Hola p2:Hello Welcome to The Hub
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/test/resources/org/apache/log4j/rewrite/reflection.xml
----------------------------------------------------------------------
diff --git a/src/test/resources/org/apache/log4j/rewrite/reflection.xml b/src/test/resources/org/apache/log4j/rewrite/reflection.xml
deleted file mode 100644
index 643850b..0000000
--- a/src/test/resources/org/apache/log4j/rewrite/reflection.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-
--->
-<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
- <appender name="F1" class="org.apache.log4j.FileAppender">
- <param name="file" value="temp"/>
- <param name="append" value="false"/>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
- </layout>
- </appender>
-
-
- <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
- <appender-ref ref="F1"/>
- <rewritePolicy class="org.apache.log4j.rewrite.ReflectionRewritePolicy"/>
- </appender>
-
- <root>
- <level value ="debug" />
- <appender-ref ref="A1" />
- </root>
-
-</log4j:configuration>
[2/4] logging-chainsaw git commit: Try to upgrade to Log4j 2
Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java b/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
index b15fbca..fe353eb 100644
--- a/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
+++ b/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
@@ -20,165 +20,85 @@ package org.apache.log4j.helpers;
import java.util.ArrayList;
import java.util.List;
-import org.apache.log4j.Level;
+import org.apache.logging.log4j.Level;
/**
* An extension of the Level class that provides support for java.util.logging
* Levels.
*
- *
* @author Scott Deboy (sdeboy@apache.org)
*/
-
-public class UtilLoggingLevel extends Level {
-
- /**
- * Serialization version id.
- */
- private static final long serialVersionUID = 909301162611820211L;
+public final class UtilLoggingLevel {
/**
* Numerical value for SEVERE.
*/
- public static final int SEVERE_INT = 22000;
+ private static final int SEVERE_INT = 22000;
/**
* Numerical value for WARNING.
*/
- public static final int WARNING_INT = 21000;
+ private static final int WARNING_INT = 21000;
+
+ /**
+ * Numerical value for INFO.
+ */
+ private static final int INFO_INT = 20000;
- //INFO level defined in parent as 20000..no need to redefine here
-
/**
* Numerical value for CONFIG.
*/
- public static final int CONFIG_INT = 14000;
+ private static final int CONFIG_INT = 14000;
+
/**
* Numerical value for FINE.
*/
- public static final int FINE_INT = 13000;
+ private static final int FINE_INT = 13000;
+
/**
* Numerical value for FINER.
*/
- public static final int FINER_INT = 12000;
+ private static final int FINER_INT = 12000;
+
/**
* Numerical value for FINEST.
*/
- public static final int FINEST_INT = 11000;
- /**
- * Numerical value for UNKNOWN.
- */
- public static final int UNKNOWN_INT = 10000;
+ private static final int FINEST_INT = 11000;
/**
* SEVERE.
*/
- public static final UtilLoggingLevel SEVERE =
- new UtilLoggingLevel(SEVERE_INT, "SEVERE", 0);
+ private static final Level SEVERE =
+ Level.forName("SEVERE", SEVERE_INT);
/**
* WARNING.
*/
- public static final UtilLoggingLevel WARNING =
- new UtilLoggingLevel(WARNING_INT, "WARNING", 4);
+ private static final Level WARNING =
+ Level.forName("WARNING", WARNING_INT);
/**
* INFO.
*/
- //note: we've aligned the int values of the java.util.logging INFO level with log4j's level
- public static final UtilLoggingLevel INFO =
- new UtilLoggingLevel(INFO_INT, "INFO", 5);
+ private static final Level INFO =
+ Level.forName("INFO", INFO_INT);
/**
* CONFIG.
*/
- public static final UtilLoggingLevel CONFIG =
- new UtilLoggingLevel(CONFIG_INT, "CONFIG", 6);
+ private static final Level CONFIG =
+ Level.forName("CONFIG", CONFIG_INT);
/**
* FINE.
*/
- public static final UtilLoggingLevel FINE =
- new UtilLoggingLevel(FINE_INT, "FINE", 7);
+ private static final Level FINE =
+ Level.forName("FINE", FINE_INT);
/**
* FINER.
*/
- public static final UtilLoggingLevel FINER =
- new UtilLoggingLevel(FINER_INT, "FINER", 8);
+ private static final Level FINER =
+ Level.forName("FINER", FINER_INT);
/**
* FINEST.
*/
- public static final UtilLoggingLevel FINEST =
- new UtilLoggingLevel(FINEST_INT, "FINEST", 9);
-
- /**
- * Create new instance.
- * @param level numeric value for level.
- * @param levelStr symbolic name for level.
- * @param syslogEquivalent Equivalent syslog severity.
- */
- protected UtilLoggingLevel(final int level,
- final String levelStr,
- final int syslogEquivalent) {
- super(level, levelStr, syslogEquivalent);
- }
-
- /**
- * Convert an integer passed as argument to a level. If the
- * conversion fails, then this method returns the specified default.
- * @param val numeric value.
- * @param defaultLevel level to be returned if no level matches
- * numeric value.
- * @return matching level or default level.
- */
- public static UtilLoggingLevel toLevel(final int val,
- final UtilLoggingLevel defaultLevel) {
- switch (val) {
- case SEVERE_INT:
- return SEVERE;
-
- case WARNING_INT:
- return WARNING;
-
- case INFO_INT:
- return INFO;
-
- case CONFIG_INT:
- return CONFIG;
-
- case FINE_INT:
- return FINE;
-
- case FINER_INT:
- return FINER;
-
- case FINEST_INT:
- return FINEST;
-
- default:
- return defaultLevel;
- }
- }
-
- /**
- * Gets level matching numeric value.
- * @param val numeric value.
- * @return matching level or UtilLoggerLevel.FINEST if no match.
- */
- public static Level toLevel(final int val) {
- return toLevel(val, FINEST);
- }
-
- /**
- * Gets list of supported levels.
- * @return list of supported levels.
- */
- public static List getAllPossibleLevels() {
- ArrayList list = new ArrayList();
- list.add(FINE);
- list.add(FINER);
- list.add(FINEST);
- list.add(INFO);
- list.add(CONFIG);
- list.add(WARNING);
- list.add(SEVERE);
- return list;
- }
+ private static final Level FINEST =
+ Level.forName("FINEST", FINEST_INT);
/**
* Get level with specified symbolic name.
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/net/MulticastAppender.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/net/MulticastAppender.java b/src/main/java/org/apache/log4j/net/MulticastAppender.java
deleted file mode 100644
index 039224d..0000000
--- a/src/main/java/org/apache/log4j/net/MulticastAppender.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.InetAddress;
-import java.net.MulticastSocket;
-import java.net.UnknownHostException;
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Map;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.xml.XMLLayout;
-
-
-/**
- * Multicast-based Appender. Works in conjunction with the MulticastReceiver, which expects
- * a LoggingEvent encoded using XMLLayout.
- *
- * Sends log information as a multicast datagrams.
- *
- * <p>Messages are not sent as LoggingEvent objects but as text after
- * applying XMLLayout.
- *
- * <p>The port and remoteHost properties can be set in configuration properties.
- * By setting the remoteHost to a broadcast address any number of clients can
- * listen for log messages.
- *
- * <p>This was inspired and really extended/copied from {@link SocketAppender}. Please
- * see the docs for the proper credit to the authors of that class.
- *
- * @author <a href="mailto:kbrown@versatilesolutions.com">Kevin Brown</a>
- * @author Scott Deboy <sdeboy@apache.org>
- *
- */
-public class MulticastAppender extends AppenderSkeleton implements PortBased {
- /**
- The default port number for the multicast packets. (9991).
- */
- static final int DEFAULT_PORT = 9991;
-
- /**
- * The MulticastDNS zone advertised by a MulticastAppender
- * the MulticastAppender also adds a 'multicastAddress' property with the multicast address value as a string
- */
- public static final String ZONE = "_log4j_xml_mcast_appender.local.";
-
- /**
- We remember host name as String in addition to the resolved
- InetAddress so that it can be returned via getOption().
- */
- String hostname;
- String remoteHost;
- String application;
- int timeToLive;
- InetAddress address;
- int port = DEFAULT_PORT;
- MulticastSocket outSocket;
- private String encoding;
-
- private boolean locationInfo = false;
- private boolean advertiseViaMulticastDNS;
- private ZeroConfSupport zeroConf;
-
- public MulticastAppender() {
- super(false);
- }
-
- /**
- Open the multicast sender for the <b>RemoteHost</b> and <b>Port</b>.
- */
- public void activateOptions() {
- try {
- hostname = InetAddress.getLocalHost().getHostName();
- } catch (UnknownHostException uhe) {
- try {
- hostname = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException uhe2) {
- hostname = "unknown";
- }
- }
-
- //allow system property of application to be primary
- if (application == null) {
- application = System.getProperty(Constants.APPLICATION_KEY);
- } else {
- if (System.getProperty(Constants.APPLICATION_KEY) != null) {
- application = application + "-" + System.getProperty(Constants.APPLICATION_KEY);
- }
- }
-
- if(remoteHost != null) {
- address = getAddressByName(remoteHost);
- } else {
- String err = "The RemoteHost property is required for MulticastAppender named "+ name;
- LogLog.error(err);
- throw new IllegalStateException(err);
- }
-
- if (layout == null) {
- layout = new XMLLayout();
- }
-
- if (advertiseViaMulticastDNS) {
- Map properties = new HashMap();
- properties.put("multicastAddress", remoteHost);
- zeroConf = new ZeroConfSupport(ZONE, port, getName(), properties);
- zeroConf.advertise();
- }
- connect();
- super.activateOptions();
- }
-
- /**
- Close this appender.
- <p>This will mark the appender as closed and
- call then {@link #cleanUp} method.
- */
- public synchronized void close() {
- if (closed) {
- return;
- }
-
- this.closed = true;
- if (advertiseViaMulticastDNS) {
- zeroConf.unadvertise();
- }
- cleanUp();
- }
-
- /**
- Close the Socket and release the underlying
- connector thread if it has been created
- */
- public void cleanUp() {
- if (outSocket != null) {
- try {
- outSocket.close();
- } catch (Exception e) {
- LogLog.error("Could not close outSocket.", e);
- }
-
- outSocket = null;
- }
- }
-
- void connect() {
- if (this.address == null) {
- return;
- }
-
- try {
- // First, close the previous connection if any.
- cleanUp();
- outSocket = new MulticastSocket();
- outSocket.setTimeToLive(timeToLive);
- } catch (IOException e) {
- LogLog.error("Error in connect method of MulticastAppender named "+name, e);
- }
- }
-
- public void append(LoggingEvent event) {
- if (event == null) {
- return;
- }
-
- if(locationInfo) {
- event.getLocationInformation();
- }
-
- if (outSocket != null) {
- event.setProperty(Constants.HOSTNAME_KEY, hostname);
-
- if (application != null) {
- event.setProperty(Constants.APPLICATION_KEY, application);
- }
-
- if(locationInfo) {
- event.getLocationInformation();
- }
-
-
- try {
- StringBuffer buf = new StringBuffer(layout.format(event));
-
- byte[] payload;
- if(encoding == null) {
- payload = buf.toString().getBytes();
- } else {
- payload = buf.toString().getBytes(encoding);
- }
-
- DatagramPacket dp =
- new DatagramPacket(payload, payload.length, address, port);
- outSocket.send(dp);
- } catch (IOException e) {
- outSocket = null;
- LogLog.warn("Detected problem with Multicast connection: " + e);
- }
- }
- }
-
- InetAddress getAddressByName(String host) {
- try {
- return InetAddress.getByName(host);
- } catch (Exception e) {
- LogLog.error("Could not find address of [" + host + "].", e);
- return null;
- }
- }
-
- /**
- The <b>RemoteHost</b> option takes a string value which should be
- the host name or ipaddress to send the multicast packets.
- */
- public void setRemoteHost(String host) {
- remoteHost = host;
- }
-
- /**
- Returns value of the <b>RemoteHost</b> option.
- */
- public String getRemoteHost() {
- return remoteHost;
- }
-
- /**
- The <b>LocationInfo</b> option takes a boolean value. If true,
- the information sent to the remote host will include location
- information. By default no location information is sent to the server.
- */
- public void setLocationInfo(boolean locationInfo) {
- this.locationInfo = locationInfo;
- }
-
- /**
- * Returns value of the <b>LocationInfo</b> option.
- */
- public boolean getLocationInfo() {
- return locationInfo;
- }
-
- /**
- The <b>Encoding</b> option specifies how the bytes are encoded. If this option is not specified,
- the System encoding is used.
- */
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- /**
- Returns value of the <b>Encoding</b> option.
- */
- public String getEncoding() {
- return encoding;
- }
- /**
- The <b>App</b> option takes a string value which should be the name of the application getting logged.
- If property was already set (via system property), don't set here.
- */
- public void setApplication(String app) {
- this.application = app;
- }
-
- /**
- Returns value of the <b>App</b> option.
- */
- public String getApplication() {
- return application;
- }
-
- /**
- The <b>Time to live</b> option takes a positive integer representing
- the time to live value.
- */
- public void setTimeToLive(int timeToLive) {
- this.timeToLive = timeToLive;
- }
-
- /**
- Returns value of the <b>Time to Live</b> option.
- */
- public int getTimeToLive() {
- return timeToLive;
- }
-
- /**
- The <b>Port</b> option takes a positive integer representing
- the port where multicast packets will be sent.
- */
- public void setPort(int port) {
- this.port = port;
- }
-
- /**
- Returns value of the <b>Port</b> option.
- */
- public int getPort() {
- return port;
- }
-
- /* (non-Javadoc)
- * @see org.apache.log4j.net.NetworkBased#isActive()
- */
- public boolean isActive() {
- // TODO handle active/inactive
- return true;
- }
-
- /**
- * Gets whether appender requires a layout.
- * @return false
- */
- public boolean requiresLayout() {
- return true;
- }
-
- public boolean isAdvertiseViaMulticastDNS() {
- return advertiseViaMulticastDNS;
- }
-
- public void setAdvertiseViaMulticastDNS(boolean advertiseViaMulticastDNS) {
- this.advertiseViaMulticastDNS = advertiseViaMulticastDNS;
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/net/SocketNode13.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/net/SocketNode13.java b/src/main/java/org/apache/log4j/net/SocketNode13.java
index e27c68e..d98dd75 100644
--- a/src/main/java/org/apache/log4j/net/SocketNode13.java
+++ b/src/main/java/org/apache/log4j/net/SocketNode13.java
@@ -26,19 +26,19 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
-import org.apache.log4j.Logger;
import org.apache.log4j.helpers.Constants;
import org.apache.log4j.plugins.Pauseable;
import org.apache.log4j.plugins.Receiver;
import org.apache.log4j.spi.ComponentBase;
import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LogEvent;
// Contributors: Moses Hohman <mm...@rainbow.uchicago.edu>
/**
- Read {@link LoggingEvent} objects sent from a remote client using
+ Read {@link LogEvent} objects sent from a remote client using
Sockets (TCP). These logging events are logged according to local
policy, as if they were generated locally.
@@ -142,7 +142,7 @@ public class SocketNode13 extends ComponentBase implements Runnable, Pauseable {
* Deserialize events from socket until interrupted.
*/
public void run() {
- LoggingEvent event;
+ LogEvent event;
Logger remoteLogger;
Exception listenerException = null;
ObjectInputStream ois = null;
@@ -171,10 +171,10 @@ public class SocketNode13 extends ComponentBase implements Runnable, Pauseable {
try {
while (!isClosed()) {
// read an event from the wire
- event = (LoggingEvent) ois.readObject();
- event.setProperty(Constants.HOSTNAME_KEY, hostName);
+ event = (LogEvent) ois.readObject();
+ event.getContextMap().put(Constants.HOSTNAME_KEY, hostName);
// store the known remote info in an event property
- event.setProperty("log4j.remoteSourceInfo", remoteInfo);
+ event.getContextMap().put("log4j.remoteSourceInfo", remoteInfo);
// if configured with a receiver, tell it to post the event
if (!isPaused() && !isClosed()) {
@@ -191,9 +191,9 @@ public class SocketNode13 extends ComponentBase implements Runnable, Pauseable {
// apply the logger-level filter
if (event
.getLevel()
- .isGreaterOrEqual(remoteLogger.getEffectiveLevel())) {
+ .isLessSpecificThan(remoteLogger.getLevel())) {
// finally log the event as if was generated locally
- remoteLogger.callAppenders(event);
+ remoteLogger. callAppenders(event);
}
}
} else {
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/net/SocketReceiver.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/net/SocketReceiver.java b/src/main/java/org/apache/log4j/net/SocketReceiver.java
index 9d4aac9..1310b61 100644
--- a/src/main/java/org/apache/log4j/net/SocketReceiver.java
+++ b/src/main/java/org/apache/log4j/net/SocketReceiver.java
@@ -33,7 +33,7 @@ import org.apache.log4j.plugins.Pauseable;
import org.apache.log4j.plugins.Plugin;
import org.apache.log4j.plugins.Receiver;
import org.apache.log4j.spi.LoggerRepository;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.core.LogEvent;
/**
@@ -470,7 +470,7 @@ public class SocketReceiver extends Receiver implements Runnable, PortBased,
}
}
/** {@inheritDoc} */
- public void doPost(final LoggingEvent event) {
+ public void doPost(final LogEvent event) {
if (!isPaused()) {
super.doPost(event);
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/net/UDPAppender.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/net/UDPAppender.java b/src/main/java/org/apache/log4j/net/UDPAppender.java
deleted file mode 100644
index 6cfe2a6..0000000
--- a/src/main/java/org/apache/log4j/net/UDPAppender.java
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.log4j.net;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.xml.XMLLayout;
-
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
-
-
-/**
- * Sends log information as a UDP datagrams.
- *
- * <p>The UDPAppender is meant to be used as a diagnostic logging tool
- * so that logging can be monitored by a simple UDP client.
- *
- * <p>Messages are not sent as LoggingEvent objects but as text after
- * applying the designated Layout.
- *
- * <p>The port and remoteHost properties can be set in configuration properties.
- * By setting the remoteHost to a broadcast address any number of clients can
- * listen for log messages.
- *
- * <p>This was inspired and really extended/copied from {@link SocketAppender}.
- * Please see the docs for the proper credit to the authors of that class.
- *
- * @author <a href="mailto:kbrown@versatilesolutions.com">Kevin Brown</a>
- * @author Scott Deboy <sdeboy@apache.org>
- */
-public class UDPAppender extends AppenderSkeleton implements PortBased{
- /**
- * The default port number for the UDP packets, 9991.
- */
- public static final int DEFAULT_PORT = 9991;
-
- /**
- We remember host name as String in addition to the resolved
- InetAddress so that it can be returned via getOption().
- */
- String hostname;
- String remoteHost;
- String application;
- String encoding;
- InetAddress address;
- int port = DEFAULT_PORT;
- DatagramSocket outSocket;
-
- /**
- * The MulticastDNS zone advertised by a UDPAppender
- */
- public static final String ZONE = "_log4j_xml_udp_appender.local.";
-
- // if there is something irrecoverably wrong with the settings, there is no
- // point in sending out packeets.
- boolean inError = false;
- private boolean advertiseViaMulticastDNS;
- private ZeroConfSupport zeroConf;
-
- public UDPAppender() {
- super(false);
- }
-
- /**
- Sends UDP packets to the <code>address</code> and <code>port</code>.
- */
- public UDPAppender(final InetAddress address, final int port) {
- super(false);
- this.address = address;
- this.remoteHost = address.getHostName();
- this.port = port;
- activateOptions();
- }
-
- /**
- Sends UDP packets to the <code>address</code> and <code>port</code>.
- */
- public UDPAppender(final String host, final int port) {
- super(false);
- this.port = port;
- this.address = getAddressByName(host);
- this.remoteHost = host;
- activateOptions();
- }
-
- /**
- Open the UDP sender for the <b>RemoteHost</b> and <b>Port</b>.
- */
- public void activateOptions() {
- try {
- hostname = InetAddress.getLocalHost().getHostName();
- } catch (UnknownHostException uhe) {
- try {
- hostname = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException uhe2) {
- hostname = "unknown";
- }
- }
-
- //allow system property of application to be primary
- if (application == null) {
- application = System.getProperty(Constants.APPLICATION_KEY);
- } else {
- if (System.getProperty(Constants.APPLICATION_KEY) != null) {
- application = application + "-" + System.getProperty(Constants.APPLICATION_KEY);
- }
- }
-
- if(remoteHost != null) {
- address = getAddressByName(remoteHost);
- connect(address, port);
- } else {
- String err = "The RemoteHost property is required for SocketAppender named "+ name;
- LogLog.error(err);
- throw new IllegalStateException(err);
- }
-
- if (layout == null) {
- layout = new XMLLayout();
- }
-
- if (advertiseViaMulticastDNS) {
- zeroConf = new ZeroConfSupport(ZONE, port, getName());
- zeroConf.advertise();
- }
-
- super.activateOptions();
- }
-
- /**
- Close this appender.
- <p>This will mark the appender as closed and
- call then {@link #cleanUp} method.
- */
- public synchronized void close() {
- if (closed) {
- return;
- }
-
- if (advertiseViaMulticastDNS) {
- zeroConf.unadvertise();
- }
-
- this.closed = true;
- cleanUp();
- }
-
- /**
- Close the UDP Socket and release the underlying
- connector thread if it has been created
- */
- public void cleanUp() {
- if (outSocket != null) {
- try {
- outSocket.close();
- } catch (Exception e) {
- LogLog.error("Could not close outSocket.", e);
- }
-
- outSocket = null;
- }
- }
-
- void connect(InetAddress address, int port) {
- if (this.address == null) {
- return;
- }
-
- try {
- // First, close the previous connection if any.
- cleanUp();
- outSocket = new DatagramSocket();
- outSocket.connect(address, port);
- } catch (IOException e) {
- LogLog.error(
- "Could not open UDP Socket for sending.", e);
- inError = true;
- }
- }
-
- public void append(LoggingEvent event) {
- if(inError) {
- return;
- }
-
- if (event == null) {
- return;
- }
-
- if (address == null) {
- return;
- }
-
- if (outSocket != null) {
- event.setProperty(Constants.HOSTNAME_KEY, hostname);
- if (application != null) {
- event.setProperty(Constants.APPLICATION_KEY, application);
- }
-
- try {
- StringBuffer buf = new StringBuffer(layout.format(event));
-
- byte[] payload;
- if(encoding == null) {
- payload = buf.toString().getBytes();
- } else {
- payload = buf.toString().getBytes(encoding);
- }
-
- DatagramPacket dp =
- new DatagramPacket(payload, payload.length, address, port);
- outSocket.send(dp);
- } catch (IOException e) {
- outSocket = null;
- LogLog.warn("Detected problem with UDP connection: " + e);
- }
- }
- }
-
- public boolean isActive() {
- return !inError;
- }
-
- InetAddress getAddressByName(String host) {
- try {
- return InetAddress.getByName(host);
- } catch (Exception e) {
- LogLog.error("Could not find address of [" + host + "].", e);
- return null;
- }
- }
-
- /**
- The UDPAppender uses layouts. Hence, this method returns
- <code>true</code>.
- */
- public boolean requiresLayout() {
- return true;
- }
-
- /**
- The <b>RemoteHost</b> option takes a string value which should be
- the host name or ipaddress to send the UDP packets.
- */
- public void setRemoteHost(String host) {
- remoteHost = host;
- }
-
- /**
- Returns value of the <b>RemoteHost</b> option.
- */
- public String getRemoteHost() {
- return remoteHost;
- }
-
- /**
- The <b>App</b> option takes a string value which should be the name of the application getting logged.
- If property was already set (via system property), don't set here.
- */
- public void setApplication(String app) {
- this.application = app;
- }
-
- /**
- Returns value of the <b>App</b> option.
- */
- public String getApplication() {
- return application;
- }
-
- /**
- The <b>Encoding</b> option specifies how the bytes are encoded. If this option is not specified,
- the System encoding is used.
- */
- public void setEncoding(String encoding) {
- this.encoding = encoding;
- }
-
- /**
- Returns value of the <b>Encoding</b> option.
- */
- public String getEncoding() {
- return encoding;
- }
-
- /**
- The <b>Port</b> option takes a positive integer representing
- the port where UDP packets will be sent.
- */
- public void setPort(int port) {
- this.port = port;
- }
-
- /**
- Returns value of the <b>Port</b> option.
- */
- public int getPort() {
- return port;
- }
-
- public void setAdvertiseViaMulticastDNS(boolean advertiseViaMulticastDNS) {
- this.advertiseViaMulticastDNS = advertiseViaMulticastDNS;
- }
-
- public boolean isAdvertiseViaMulticastDNS() {
- return advertiseViaMulticastDNS;
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/net/ZeroConfSupport.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/net/ZeroConfSupport.java b/src/main/java/org/apache/log4j/net/ZeroConfSupport.java
new file mode 100644
index 0000000..520ff53
--- /dev/null
+++ b/src/main/java/org/apache/log4j/net/ZeroConfSupport.java
@@ -0,0 +1,193 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.net;
+
+import org.apache.logging.log4j.status.StatusLogger;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+
+public class ZeroConfSupport {
+ private static Object jmDNS = initializeJMDNS();
+
+ private static Class jmDNSClass;
+ private static Class serviceInfoClass;
+
+ private Object serviceInfo;
+
+ public ZeroConfSupport(String zone, int port, String name, Map properties) {
+ //if version 3 is available, use it to construct a serviceInfo instance, otherwise support the version1 API
+ boolean isVersion3 = false;
+ try {
+ //create method is in version 3, not version 1
+ jmDNSClass.getMethod("create", null);
+ isVersion3 = true;
+ } catch (NoSuchMethodException e) {
+ //no-op
+ }
+
+ if (isVersion3) {
+ StatusLogger.getLogger().debug("using JmDNS version 3 to construct serviceInfo instance");
+ serviceInfo = buildServiceInfoVersion3(zone, port, name, properties);
+ } else {
+ StatusLogger.getLogger().debug("using JmDNS version 1.0 to construct serviceInfo instance");
+ serviceInfo = buildServiceInfoVersion1(zone, port, name, properties);
+ }
+ }
+
+ public ZeroConfSupport(String zone, int port, String name) {
+ this(zone, port, name, new HashMap());
+ }
+
+ private static Object createJmDNSVersion1() {
+ try {
+ return jmDNSClass.newInstance();
+ } catch (InstantiationException | IllegalAccessException e) {
+ StatusLogger.getLogger().warn("Unable to instantiate JMDNS", e);
+ }
+ return null;
+ }
+
+ private static Object createJmDNSVersion3() {
+ try {
+ Method jmDNSCreateMethod = jmDNSClass.getMethod("create", null);
+ return jmDNSCreateMethod.invoke(null, null);
+ } catch (IllegalAccessException e) {
+ StatusLogger.getLogger().warn("Unable to instantiate jmdns class", e);
+ } catch (NoSuchMethodException e) {
+ StatusLogger.getLogger().warn("Unable to access constructor", e);
+ } catch (InvocationTargetException e) {
+ StatusLogger.getLogger().warn("Unable to call constructor", e);
+ }
+ return null;
+ }
+
+ private Object buildServiceInfoVersion1(String zone, int port, String name, Map properties) {
+ //version 1 uses a hashtable
+ Hashtable hashtableProperties = new Hashtable(properties);
+ try {
+ Class[] args = new Class[6];
+ args[0] = String.class;
+ args[1] = String.class;
+ args[2] = int.class;
+ args[3] = int.class; //weight (0)
+ args[4] = int.class; //priority (0)
+ args[5] = Hashtable.class;
+ Constructor constructor = serviceInfoClass.getConstructor(args);
+ Object[] values = new Object[6];
+ values[0] = zone;
+ values[1] = name;
+ values[2] = port;
+ values[3] = 0;
+ values[4] = 0;
+ values[5] = hashtableProperties;
+ Object result = constructor.newInstance(values);
+ StatusLogger.getLogger().debug("created serviceinfo: " + result);
+ return result;
+ } catch (IllegalAccessException | InstantiationException | InvocationTargetException e) {
+ StatusLogger.getLogger().warn("Unable to construct ServiceInfo instance", e);
+ } catch (NoSuchMethodException e) {
+ StatusLogger.getLogger().warn("Unable to get ServiceInfo constructor", e);
+ }
+ return null;
+ }
+
+ private Object buildServiceInfoVersion3(String zone, int port, String name, Map properties) {
+ try {
+ Class[] args = new Class[6];
+ args[0] = String.class; //zone/type
+ args[1] = String.class; //display name
+ args[2] = int.class; //port
+ args[3] = int.class; //weight (0)
+ args[4] = int.class; //priority (0)
+ args[5] = Map.class;
+ Method serviceInfoCreateMethod = serviceInfoClass.getMethod("create", args);
+ Object[] values = new Object[6];
+ values[0] = zone;
+ values[1] = name;
+ values[2] = port;
+ values[3] = 0;
+ values[4] = 0;
+ values[5] = properties;
+ Object result = serviceInfoCreateMethod.invoke(null, values);
+ StatusLogger.getLogger().debug("created serviceinfo: " + result);
+ return result;
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ StatusLogger.getLogger().warn("Unable to invoke create method", e);
+ } catch (NoSuchMethodException e) {
+ StatusLogger.getLogger().warn("Unable to find create method", e);
+ }
+ return null;
+ }
+
+ public void advertise() {
+ try {
+ Method method = jmDNSClass.getMethod("registerService", new Class[] {serviceInfoClass});
+ method.invoke(jmDNS, serviceInfo);
+ StatusLogger.getLogger().debug("registered serviceInfo: " + serviceInfo);
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ StatusLogger.getLogger().warn("Unable to invoke registerService method", e);
+ } catch (NoSuchMethodException e) {
+ StatusLogger.getLogger().warn("No registerService method", e);
+ }
+ }
+
+ public void unadvertise() {
+ try {
+ Method method = jmDNSClass.getMethod("unregisterService", serviceInfoClass);
+ method.invoke(jmDNS, serviceInfo);
+ StatusLogger.getLogger().debug("unregistered serviceInfo: " + serviceInfo);
+ } catch (IllegalAccessException | InvocationTargetException e) {
+ StatusLogger.getLogger().warn("Unable to invoke unregisterService method", e);
+ } catch (NoSuchMethodException e) {
+ StatusLogger.getLogger().warn("No unregisterService method", e);
+ }
+ }
+
+ private static Object initializeJMDNS() {
+ try {
+ jmDNSClass = Class.forName("javax.jmdns.JmDNS");
+ serviceInfoClass = Class.forName("javax.jmdns.ServiceInfo");
+ } catch (ClassNotFoundException e) {
+ StatusLogger.getLogger().warn("JmDNS or serviceInfo class not found", e);
+ }
+
+ //if version 3 is available, use it to construct a serviceInfo instance, otherwise support the version1 API
+ boolean isVersion3 = false;
+ try {
+ //create method is in version 3, not version 1
+ jmDNSClass.getMethod("create", null);
+ isVersion3 = true;
+ } catch (NoSuchMethodException e) {
+ //no-op
+ }
+
+ if (isVersion3) {
+ return createJmDNSVersion3();
+ } else {
+ return createJmDNSVersion1();
+ }
+ }
+
+ public static Object getJMDNSInstance() {
+ return jmDNS;
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/or/DefaultRenderer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/or/DefaultRenderer.java b/src/main/java/org/apache/log4j/or/DefaultRenderer.java
new file mode 100644
index 0000000..7fe4ac6
--- /dev/null
+++ b/src/main/java/org/apache/log4j/or/DefaultRenderer.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.or;
+
+/**
+ The default Renderer renders objects by calling their
+ <code>toString</code> method.
+
+ @author Ceki Gülcü
+ @since 1.0 */
+class DefaultRenderer implements ObjectRenderer {
+
+ DefaultRenderer() {
+ }
+
+ /**
+ Render the object passed as parameter by calling its
+ <code>toString</code> method. */
+ public
+ String doRender(final Object o) {
+ try {
+ return o.toString();
+ } catch(Exception ex) {
+ return ex.toString();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/or/ObjectRenderer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/or/ObjectRenderer.java b/src/main/java/org/apache/log4j/or/ObjectRenderer.java
new file mode 100644
index 0000000..8ad9943
--- /dev/null
+++ b/src/main/java/org/apache/log4j/or/ObjectRenderer.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.or;
+
+/**
+ Implement this interface in order to render objects as strings.
+
+ @author Ceki Gülcü
+ @since 1.0 */
+public interface ObjectRenderer {
+
+ /**
+ Render the object passed as parameter as a String.
+ */
+ public
+ String doRender(Object o);
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/or/RendererMap.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/or/RendererMap.java b/src/main/java/org/apache/log4j/or/RendererMap.java
new file mode 100644
index 0000000..9d2de06
--- /dev/null
+++ b/src/main/java/org/apache/log4j/or/RendererMap.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.or;
+
+import org.apache.log4j.spi.RendererSupport;
+import org.apache.logging.log4j.core.util.OptionConverter;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.LoaderUtil;
+
+import java.util.Hashtable;
+
+/**
+ Map class objects to an {@link ObjectRenderer}.
+
+ @author Ceki Gülcü
+ @since version 1.0 */
+public class RendererMap {
+
+ Hashtable map;
+
+ static ObjectRenderer defaultRenderer = new DefaultRenderer();
+
+ public RendererMap() {
+ map = new Hashtable();
+ }
+
+ /**
+ Add a renderer to a hierarchy passed as parameter.
+ */
+ static
+ public
+ void addRenderer(RendererSupport repository, String renderedClassName,
+ String renderingClassName) {
+ StatusLogger.getLogger().debug("Rendering class: ["+renderingClassName+"], Rendered class: ["+
+ renderedClassName+"].");
+ ObjectRenderer renderer = (ObjectRenderer)
+ OptionConverter.instantiateByClassName(renderingClassName,
+ ObjectRenderer.class,
+ null);
+ if(renderer == null) {
+ StatusLogger.getLogger().error("Could not instantiate renderer ["+renderingClassName+"].");
+ return;
+ } else {
+ try {
+ Class renderedClass = LoaderUtil.loadClass(renderedClassName);
+ repository.setRenderer(renderedClass, renderer);
+ } catch(ClassNotFoundException e) {
+ StatusLogger.getLogger().error("Could not find class ["+renderedClassName+"].", e);
+ }
+ }
+ }
+
+
+ /**
+ Find the appropriate renderer for the class type of the
+ <code>o</code> parameter. This is accomplished by calling the
+ {@link #get(Class)} method. Once a renderer is found, it is
+ applied on the object <code>o</code> and the result is returned
+ as a {@link String}. */
+ public
+ String findAndRender(Object o) {
+ if(o == null) {
+ return null;
+ } else {
+ return get(o.getClass()).doRender(o);
+ }
+ }
+
+
+ /**
+ Syntactic sugar method that calls {@link #get(Class)} with the
+ class of the object parameter. */
+ public ObjectRenderer get(Object o) {
+ if(o == null) {
+ return null;
+ } else {
+ return get(o.getClass());
+ }
+ }
+
+
+ /**
+ Search the parents of <code>clazz</code> for a renderer. The
+ renderer closest in the hierarchy will be returned. If no
+ renderers could be found, then the default renderer is returned.
+
+ <p>The search first looks for a renderer configured for
+ <code>clazz</code>. If a renderer could not be found, then the
+ search continues by looking at all the interfaces implemented by
+ <code>clazz</code> including the super-interfaces of each
+ interface. If a renderer cannot be found, then the search looks
+ for a renderer defined for the parent (superclass) of
+ <code>clazz</code>. If that fails, then all the interfaces
+ implemented by the parent of <code>clazz</code> are searched and
+ so on.
+
+ <p>For example, if A0, A1, A2 are classes and X0, X1, X2, Y0, Y1
+ are interfaces where A2 extends A1 which in turn extends A0 and
+ similarly X2 extends X1 which extends X0 and Y1 extends Y0. Let
+ us also assume that A1 implements the Y0 interface and that A2
+ implements the X2 interface.
+
+ <p>The table below shows the results returned by the
+ <code>get(A2.class)</code> method depending on the renderers
+ added to the map.
+
+ <p><table border="1">
+ <tr><th>Added renderers</th><th>Value returned by <code>get(A2.class)</code></th>
+
+ <tr><td><code>A0Renderer</code>
+ <td align="center"><code>A0Renderer</code>
+
+ <tr><td><code>A0Renderer, A1Renderer</code>
+ <td align="center"><code>A1Renderer</code>
+
+ <tr><td><code>X0Renderer</code>
+ <td align="center"><code>X0Renderer</code>
+
+ <tr><td><code>A1Renderer, X0Renderer</code>
+ <td align="center"><code>X0Renderer</code>
+
+ </table>
+
+ <p>This search algorithm is not the most natural, although it is
+ particularly easy to implement. Future log4j versions
+ <em>may</em> implement a more intuitive search
+ algorithm. However, the present algorithm should be acceptable in
+ the vast majority of circumstances.
+
+ */
+ public ObjectRenderer get(Class clazz) {
+ //System.out.println("\nget: "+clazz);
+ ObjectRenderer r = null;
+ for(Class c = clazz; c != null; c = c.getSuperclass()) {
+ //System.out.println("Searching for class: "+c);
+ r = (ObjectRenderer) map.get(c);
+ if(r != null) {
+ return r;
+ }
+ r = searchInterfaces(c);
+ if(r != null) {
+ return r;
+ }
+ }
+ return defaultRenderer;
+ }
+
+ ObjectRenderer searchInterfaces(Class c) {
+ //System.out.println("Searching interfaces of class: "+c);
+
+ ObjectRenderer r = (ObjectRenderer) map.get(c);
+ if(r != null) {
+ return r;
+ } else {
+ Class[] ia = c.getInterfaces();
+ for(int i = 0; i < ia.length; i++) {
+ r = searchInterfaces(ia[i]);
+ if(r != null) {
+ return r;
+ }
+ }
+ }
+ return null;
+ }
+
+
+ public ObjectRenderer getDefaultRenderer() {
+ return defaultRenderer;
+ }
+
+
+ public
+ void clear() {
+ map.clear();
+ }
+
+ /**
+ Register an {@link ObjectRenderer} for <code>clazz</code>.
+ */
+ public
+ void put(Class clazz, ObjectRenderer or) {
+ map.put(clazz, or);
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/plugins/Plugin.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/plugins/Plugin.java b/src/main/java/org/apache/log4j/plugins/Plugin.java
index ca54665..26ff6ff 100644
--- a/src/main/java/org/apache/log4j/plugins/Plugin.java
+++ b/src/main/java/org/apache/log4j/plugins/Plugin.java
@@ -135,7 +135,7 @@ public interface Plugin extends OptionHandler {
* is more work than is needed, so this simple method is used instead.</p>
*
* @param testPlugin The plugin to test equivalency against.
- * @return Returns true if testPlugin is considered to be equivelent.
+ * @return Returns true if testPlugin is considered to be equivalent.
*/
boolean isEquivalent(Plugin testPlugin);
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/plugins/Receiver.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/plugins/Receiver.java b/src/main/java/org/apache/log4j/plugins/Receiver.java
index 39c31e0..331d71f 100644
--- a/src/main/java/org/apache/log4j/plugins/Receiver.java
+++ b/src/main/java/org/apache/log4j/plugins/Receiver.java
@@ -17,9 +17,9 @@
package org.apache.log4j.plugins;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.LogEvent;
import org.apache.log4j.spi.Thresholdable;
@@ -70,7 +70,7 @@ public abstract class Receiver extends PluginSkeleton implements Thresholdable {
}
/**
- * Sets the receiver theshold to the given level.
+ * Sets the receiver threshold to the given level.
*
* @param level The threshold level events must equal or be greater
* than before further processing can be done.
@@ -100,7 +100,7 @@ public abstract class Receiver extends PluginSkeleton implements Thresholdable {
*/
public boolean isAsSevereAsThreshold(final Level level) {
return ((thresholdLevel == null)
- || level.isGreaterOrEqual(thresholdLevel));
+ || level.isLessSpecificThan(thresholdLevel));
}
/**
@@ -109,7 +109,7 @@ public abstract class Receiver extends PluginSkeleton implements Thresholdable {
*
* @param event the log event to post to the local log4j environment.
*/
- public void doPost(final LoggingEvent event) {
+ public void doPost(final LogEvent event) {
// if event does not meet threshold, exit now
if (!isAsSevereAsThreshold(event.getLevel())) {
return;
@@ -123,7 +123,7 @@ public abstract class Receiver extends PluginSkeleton implements Thresholdable {
// if the logger level is greater or equal to the level
// of the event, use the logger to append the event.
if (event.getLevel()
- .isGreaterOrEqual(localLogger.getEffectiveLevel())) {
+ .isLessSpecificThan(localLogger.getEffectiveLevel())) {
// call the loggers appenders to process the event
localLogger.callAppenders(event);
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java b/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
deleted file mode 100644
index 4fca465..0000000
--- a/src/main/java/org/apache/log4j/rewrite/MapRewritePolicy.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.log4j.rewrite;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- * This policy rewrites events where the message of the
- * original event implementes java.util.Map.
- * All other events are passed through unmodified.
- * If the map contains a "message" entry, the value will be
- * used as the message for the rewritten event. The rewritten
- * event will have a property set that is the combination of the
- * original property set and the other members of the message map.
- * If both the original property set and the message map
- * contain the same entry, the value from the message map
- * will overwrite the original property set.
- *
- * The combination of the RewriteAppender and this policy
- * performs the same actions as the MapFilter from log4j 1.3.
- */
-public class MapRewritePolicy implements RewritePolicy {
- /**
- * {@inheritDoc}
- */
- public LoggingEvent rewrite(final LoggingEvent source) {
- Object msg = source.getMessage();
- if (msg instanceof Map) {
- Map props = new HashMap(source.getProperties());
- Map eventProps = (Map) msg;
- //
- // if the map sent in the logging request
- // has "message" entry, use that as the message body
- // otherwise, use the entire map.
- //
- Object newMsg = eventProps.get("message");
- if (newMsg == null) {
- newMsg = msg;
- }
-
- for(Iterator iter = eventProps.entrySet().iterator();
- iter.hasNext();
- ) {
- Map.Entry entry = (Map.Entry) iter.next();
- if (!("message".equals(entry.getKey()))) {
- props.put(entry.getKey(), entry.getValue());
- }
- }
-
- return new LoggingEvent(
- source.getFQNOfLoggerClass(),
- source.getLogger() != null ? source.getLogger(): Logger.getLogger(source.getLoggerName()),
- source.getTimeStamp(),
- source.getLevel(),
- newMsg,
- source.getThreadName(),
- source.getThrowableInformation(),
- source.getNDC(),
- source.getLocationInformation(),
- props);
- } else {
- return source;
- }
-
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java b/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
deleted file mode 100644
index 535736c..0000000
--- a/src/main/java/org/apache/log4j/rewrite/PropertyRewritePolicy.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.log4j.rewrite;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- * This policy rewrites events by adding
- * a user-specified list of properties to the event.
- * Existing properties are not modified.
- *
- * The combination of the RewriteAppender and this policy
- * performs the same actions as the PropertyFilter from log4j 1.3.
- */
-
-public class PropertyRewritePolicy implements RewritePolicy {
- private Map properties = Collections.EMPTY_MAP;
- public PropertyRewritePolicy() {
- }
-
- /**
- * Set a string representing the property name/value pairs.
- *
- * Form: propname1=propvalue1,propname2=propvalue2
- *
- * @param props
- */
- public void setProperties(String props) {
- Map hashTable = new HashMap();
- StringTokenizer pairs = new StringTokenizer(props, ",");
- while (pairs.hasMoreTokens()) {
- StringTokenizer entry = new StringTokenizer(pairs.nextToken(), "=");
- hashTable.put(entry.nextElement().toString().trim(), entry.nextElement().toString().trim());
- }
- synchronized(this) {
- properties = hashTable;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public LoggingEvent rewrite(final LoggingEvent source) {
- if (!properties.isEmpty()) {
- Map rewriteProps = new HashMap(source.getProperties());
- for(Iterator iter = properties.entrySet().iterator();
- iter.hasNext();
- ) {
- Map.Entry entry = (Map.Entry) iter.next();
- if (!rewriteProps.containsKey(entry.getKey())) {
- rewriteProps.put(entry.getKey(), entry.getValue());
- }
- }
-
- return new LoggingEvent(
- source.getFQNOfLoggerClass(),
- source.getLogger() != null ? source.getLogger(): Logger.getLogger(source.getLoggerName()),
- source.getTimeStamp(),
- source.getLevel(),
- source.getMessage(),
- source.getThreadName(),
- source.getThrowableInformation(),
- source.getNDC(),
- source.getLocationInformation(),
- rewriteProps);
- }
- return source;
- }
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java b/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java
deleted file mode 100644
index f1a4cc5..0000000
--- a/src/main/java/org/apache/log4j/rewrite/ReflectionRewritePolicy.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.log4j.rewrite;
-
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-import org.apache.log4j.helpers.LogLog;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- * This policy rewrites events by evaluating any
- * JavaBean properties on the message object and adding them
- * to the event properties. If the message object has a
- * message property, the value of that property will be
- * used as the message for the rewritten event and will
- * not be added to the event properties. Values from the
- * JavaBean properties will replace any existing property
- * with the same name.
- *
- * The combination of the RewriteAppender and this policy
- * performs the same actions as the ReflectionFilter from log4j 1.3.
- */
-public class ReflectionRewritePolicy implements RewritePolicy {
- /**
- * {@inheritDoc}
- */
- public LoggingEvent rewrite(final LoggingEvent source) {
- Object msg = source.getMessage();
- if (!(msg instanceof String)) {
- Object newMsg = msg;
- Map rewriteProps = new HashMap(source.getProperties());
-
- try {
- PropertyDescriptor[] props = Introspector.getBeanInfo(
- msg.getClass(), Object.class).getPropertyDescriptors();
- if (props.length > 0) {
- for (int i=0;i<props.length;i++) {
- try {
- Object propertyValue =
- props[i].getReadMethod().invoke(msg,
- (Object[]) null);
- if ("message".equalsIgnoreCase(props[i].getName())) {
- newMsg = propertyValue;
- } else {
- rewriteProps.put(props[i].getName(), propertyValue);
- }
- } catch (Exception e) {
- LogLog.warn("Unable to evaluate property " +
- props[i].getName(), e);
- }
- }
- return new LoggingEvent(
- source.getFQNOfLoggerClass(),
- source.getLogger() != null ? source.getLogger(): Logger.getLogger(source.getLoggerName()),
- source.getTimeStamp(),
- source.getLevel(),
- newMsg,
- source.getThreadName(),
- source.getThrowableInformation(),
- source.getNDC(),
- source.getLocationInformation(),
- rewriteProps);
- }
- } catch (Exception e) {
- LogLog.warn("Unable to get property descriptors", e);
- }
-
- }
- return source;
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java b/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java
deleted file mode 100644
index 368ecf9..0000000
--- a/src/main/java/org/apache/log4j/rewrite/RewriteAppender.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.log4j.rewrite;
-
-import org.apache.log4j.Appender;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.helpers.AppenderAttachableImpl;
-import org.apache.log4j.spi.AppenderAttachable;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.OptionHandler;
-import org.apache.log4j.xml.UnrecognizedElementHandler;
-import org.w3c.dom.Element;
-
-import java.util.Enumeration;
-import java.util.Properties;
-
-/**
- * This appender forwards a logging request to another
- * appender after possibly rewriting the logging event.
- *
- * This appender (with the appropriate policy)
- * replaces the MapFilter, PropertyFilter and ReflectionFilter
- * from log4j 1.3.
- */
-public class RewriteAppender extends AppenderSkeleton
- implements AppenderAttachable, UnrecognizedElementHandler {
- /**
- * Rewrite policy.
- */
- private RewritePolicy policy;
- /**
- * Nested appenders.
- */
- private final AppenderAttachableImpl appenders;
-
- public RewriteAppender() {
- appenders = new AppenderAttachableImpl();
- }
-
- /**
- * {@inheritDoc}
- */
- protected void append(final LoggingEvent event) {
- LoggingEvent rewritten = event;
- if (policy != null) {
- rewritten = policy.rewrite(event);
- }
- if (rewritten != null) {
- synchronized (appenders) {
- appenders.appendLoopOnAppenders(rewritten);
- }
- }
- }
-
- /**
- * Add appender.
- *
- * @param newAppender appender to add, may not be null.
- */
- public void addAppender(final Appender newAppender) {
- synchronized (appenders) {
- appenders.addAppender(newAppender);
- }
- }
-
- /**
- * Get iterator over attached appenders.
- * @return iterator or null if no attached appenders.
- */
- public Enumeration getAllAppenders() {
- synchronized (appenders) {
- return appenders.getAllAppenders();
- }
- }
-
- /**
- * Get appender by name.
- *
- * @param name name, may not be null.
- * @return matching appender or null.
- */
- public Appender getAppender(final String name) {
- synchronized (appenders) {
- return appenders.getAppender(name);
- }
- }
-
-
- /**
- * Close this <code>AsyncAppender</code> by interrupting the dispatcher
- * thread which will process all pending events before exiting.
- */
- public void close() {
- closed = true;
- //
- // close all attached appenders.
- //
- synchronized (appenders) {
- Enumeration iter = appenders.getAllAppenders();
-
- if (iter != null) {
- while (iter.hasMoreElements()) {
- Object next = iter.nextElement();
-
- if (next instanceof Appender) {
- ((Appender) next).close();
- }
- }
- }
- }
- }
-
- /**
- * Determines if specified appender is attached.
- * @param appender appender.
- * @return true if attached.
- */
- public boolean isAttached(final Appender appender) {
- synchronized (appenders) {
- return appenders.isAttached(appender);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean requiresLayout() {
- return false;
- }
-
- /**
- * Removes and closes all attached appenders.
- */
- public void removeAllAppenders() {
- synchronized (appenders) {
- appenders.removeAllAppenders();
- }
- }
-
- /**
- * Removes an appender.
- * @param appender appender to remove.
- */
- public void removeAppender(final Appender appender) {
- synchronized (appenders) {
- appenders.removeAppender(appender);
- }
- }
-
- /**
- * Remove appender by name.
- * @param name name.
- */
- public void removeAppender(final String name) {
- synchronized (appenders) {
- appenders.removeAppender(name);
- }
- }
-
-
- public void setRewritePolicy(final RewritePolicy rewritePolicy) {
- policy = rewritePolicy;
- }
- /**
- * {@inheritDoc}
- */
- public boolean parseUnrecognizedElement(final Element element,
- final Properties props) throws Exception {
- final String nodeName = element.getNodeName();
- if ("rewritePolicy".equals(nodeName)) {
- Object rewritePolicy =
- org.apache.log4j.xml.DOMConfigurator.parseElement(
- element, props, RewritePolicy.class);
- if (rewritePolicy != null) {
- if (rewritePolicy instanceof OptionHandler) {
- ((OptionHandler) rewritePolicy).activateOptions();
- }
- this.setRewritePolicy((RewritePolicy) rewritePolicy);
- }
- return true;
- }
- return false;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java b/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java
deleted file mode 100644
index bb40507..0000000
--- a/src/main/java/org/apache/log4j/rewrite/RewritePolicy.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.apache.log4j.rewrite;
-
-import org.apache.log4j.spi.LoggingEvent;
-
-/*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-/**
- * This interface is implemented to provide a rewrite
- * strategy for RewriteAppender. RewriteAppender will
- * call the rewrite method with a source logging event.
- * The strategy may return that event, create a new event
- * or return null to suppress the logging request.
- */
-public interface RewritePolicy {
- /**
- * Rewrite a logging event.
- * @param source a logging event that may be returned or
- * used to create a new logging event.
- * @return a logging event or null to suppress processing.
- */
- LoggingEvent rewrite(final LoggingEvent source);
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/ComponentBase.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/ComponentBase.java b/src/main/java/org/apache/log4j/spi/ComponentBase.java
index 77ba7cf..03436f2 100644
--- a/src/main/java/org/apache/log4j/spi/ComponentBase.java
+++ b/src/main/java/org/apache/log4j/spi/ComponentBase.java
@@ -17,7 +17,7 @@
package org.apache.log4j.spi;
import org.apache.log4j.ULogger;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
/**
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/Decoder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/Decoder.java b/src/main/java/org/apache/log4j/spi/Decoder.java
index d4686ad..f49e482 100644
--- a/src/main/java/org/apache/log4j/spi/Decoder.java
+++ b/src/main/java/org/apache/log4j/spi/Decoder.java
@@ -18,6 +18,8 @@
package org.apache.log4j.spi;
+import org.apache.logging.log4j.core.LogEvent;
+
import java.io.IOException;
import java.net.URL;
@@ -38,26 +40,26 @@ public interface Decoder {
* @param document document to decode.
* @return list of LoggingEvent instances.
*/
- Vector decodeEvents(String document);
+ Vector<LogEvent> decodeEvents(String document);
/**
* Decode event from string.
* @param event string representation of event
* @return event
*/
- LoggingEvent decode(String event);
+ LogEvent decode(String event);
/**
- * Decode event from document retreived from URL.
+ * Decode event from document retrieved from URL.
* @param url url of document
* @return list of LoggingEvent instances.
* @throws IOException if IO error resolving document.
*/
- Vector decode(URL url) throws IOException;
+ Vector<LogEvent> decode(URL url) throws IOException;
/**
* Sets additional properties.
* @param additionalProperties map of additional properties.
*/
- void setAdditionalProperties(Map additionalProperties);
+ void setAdditionalProperties(Map<String, String> additionalProperties);
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/HierarchyEventListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/HierarchyEventListener.java b/src/main/java/org/apache/log4j/spi/HierarchyEventListener.java
new file mode 100644
index 0000000..841abf8
--- /dev/null
+++ b/src/main/java/org/apache/log4j/spi/HierarchyEventListener.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.spi;
+
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.Logger;
+
+/**
+ Listen to events occurring within a Hierarchy.
+
+ @author Ceki Gülcü
+ @since 1.2
+
+ */
+public interface HierarchyEventListener {
+
+ void addAppenderEvent(Logger logger, Appender appender);
+
+ void removeAppenderEvent(Logger logger, Appender appender);
+
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/Log4JULogger.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/Log4JULogger.java b/src/main/java/org/apache/log4j/spi/Log4JULogger.java
index 2476810..75ae328 100644
--- a/src/main/java/org/apache/log4j/spi/Log4JULogger.java
+++ b/src/main/java/org/apache/log4j/spi/Log4JULogger.java
@@ -16,10 +16,10 @@
*/
package org.apache.log4j.spi;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.Level;
import org.apache.log4j.ULogger;
import org.apache.log4j.helpers.MessageFormatter;
-import org.apache.log4j.Level;
/**
@@ -142,7 +142,7 @@ public final class Log4JULogger implements ULogger {
* {@inheritDoc}
*/
public boolean isWarnEnabled() {
- return logger.isEnabledFor(Level.WARN);
+ return logger.isEnabled(Level.WARN);
}
/**
@@ -157,7 +157,7 @@ public final class Log4JULogger implements ULogger {
*/
public void warn(final Object parameterizedMsg,
final Object param1) {
- if (logger.isEnabledFor(Level.WARN)) {
+ if (logger.isEnabled(Level.WARN)) {
logger.warn(MessageFormatter.format(
parameterizedMsg.toString(), param1));
}
@@ -169,7 +169,7 @@ public final class Log4JULogger implements ULogger {
public void warn(final String parameterizedMsg,
final Object param1,
final Object param2) {
- if (logger.isEnabledFor(Level.WARN)) {
+ if (logger.isEnabled(Level.WARN)) {
logger.warn(MessageFormatter.format(
parameterizedMsg.toString(), param1, param2));
}
@@ -186,7 +186,7 @@ public final class Log4JULogger implements ULogger {
* {@inheritDoc}
*/
public boolean isErrorEnabled() {
- return logger.isEnabledFor(Level.ERROR);
+ return logger.isEnabled(Level.ERROR);
}
/**
@@ -201,7 +201,7 @@ public final class Log4JULogger implements ULogger {
* {@inheritDoc}
*/
public void error(final Object parameterizedMsg, final Object param1) {
- if (logger.isEnabledFor(Level.ERROR)) {
+ if (logger.isEnabled(Level.ERROR)) {
logger.error(MessageFormatter.format(
parameterizedMsg.toString(), param1));
}
@@ -213,7 +213,7 @@ public final class Log4JULogger implements ULogger {
public void error(final String parameterizedMsg,
final Object param1,
final Object param2) {
- if (logger.isEnabledFor(Level.ERROR)) {
+ if (logger.isEnabled(Level.ERROR)) {
logger.error(MessageFormatter.format(
parameterizedMsg.toString(), param1, param2));
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/LoggerEventListener.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/LoggerEventListener.java b/src/main/java/org/apache/log4j/spi/LoggerEventListener.java
index b39f728..2c95502 100644
--- a/src/main/java/org/apache/log4j/spi/LoggerEventListener.java
+++ b/src/main/java/org/apache/log4j/spi/LoggerEventListener.java
@@ -17,8 +17,8 @@
package org.apache.log4j.spi;
-import org.apache.log4j.Appender;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.Logger;
/**
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/LoggerFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/LoggerFactory.java b/src/main/java/org/apache/log4j/spi/LoggerFactory.java
new file mode 100644
index 0000000..6c06f24
--- /dev/null
+++ b/src/main/java/org/apache/log4j/spi/LoggerFactory.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.spi;
+
+import org.apache.logging.log4j.Logger;
+
+/**
+
+ Implement this interface to create new instances of Logger or
+ a sub-class of Logger.
+
+ @author Ceki Gülcü
+ @since version 0.8.5
+
+ */
+public interface LoggerFactory {
+
+ Logger makeNewLoggerInstance(String name);
+
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/LoggerRepository.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/LoggerRepository.java b/src/main/java/org/apache/log4j/spi/LoggerRepository.java
new file mode 100644
index 0000000..ad7df75
--- /dev/null
+++ b/src/main/java/org/apache/log4j/spi/LoggerRepository.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.spi;
+
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+
+import java.util.Enumeration;
+import java.util.Locale;
+
+/**
+ A <code>LoggerRepository</code> is used to create and retrieve
+ <code>Loggers</code>. The relation between loggers in a repository
+ depends on the repository but typically loggers are arranged in a
+ named hierarchy.
+
+ <p>In addition to the creational methods, a
+ <code>LoggerRepository</code> can be queried for existing loggers,
+ can act as a point of registry for events related to loggers.
+
+ @author Ceki Gülcü
+ @since 1.2 */
+public interface LoggerRepository {
+
+ /**
+ Add a {@link HierarchyEventListener} event to the repository.
+ */
+ void addHierarchyEventListener(HierarchyEventListener listener);
+
+ /**
+ Returns whether this repository is disabled for a given
+ level. The answer depends on the repository threshold and the
+ <code>level</code> parameter. See also {@link #setThreshold}
+ method. */
+ boolean isDisabled(int level);
+
+ /**
+ Set the repository-wide threshold. All logging requests below the
+ threshold are immediately dropped. By default, the threshold is
+ set to <code>Level.ALL</code> which has the lowest possible rank. */
+ void setThreshold(Level level);
+
+ /**
+ Another form of {@link #setThreshold(Level)} accepting a string
+ parameter instead of a <code>Level</code>. */
+ void setThreshold(String val);
+
+
+ void emitNoAppenderWarning(Locale.Category cat);
+
+ /**
+ Get the repository-wide threshold. See {@link
+ #setThreshold(Level)} for an explanation. */
+ Level getThreshold();
+
+ Logger getLogger(String name);
+
+ Logger getLogger(String name, LoggerFactory factory);
+
+ Logger getRootLogger();
+
+ Logger exists(String name);
+
+ void shutdown();
+
+ Enumeration<Logger> getCurrentLoggers();
+
+ void fireAddAppenderEvent(Logger logger, Appender appender);
+
+ void resetConfiguration();
+
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java b/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
index c079a2c..8a5cb40 100644
--- a/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
+++ b/src/main/java/org/apache/log4j/spi/LoggerRepositoryEx.java
@@ -17,9 +17,8 @@
package org.apache.log4j.spi;
-import org.apache.log4j.Appender;
-import org.apache.log4j.Category;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.plugins.PluginRegistry;
import org.apache.log4j.scheduler.Scheduler;
@@ -103,7 +102,7 @@ public interface LoggerRepositoryEx extends LoggerRepository {
@param logger The logger from which the appender was removed.
@param appender The appender removed from the logger.
*/
- void fireRemoveAppenderEvent(Category logger, Appender appender);
+ void fireRemoveAppenderEvent(Logger logger, Appender appender);
/**
Requests that a level changed event be sent to any registered
@@ -119,7 +118,7 @@ public interface LoggerRepositoryEx extends LoggerRepository {
void fireConfigurationChangedEvent();
/**
- * Return the PluginRegisty for this LoggerRepository.
+ * Return the PluginRegistry for this LoggerRepository.
* @return plug in registry.
*/
PluginRegistry getPluginRegistry();
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/spi/OptionHandler.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/spi/OptionHandler.java b/src/main/java/org/apache/log4j/spi/OptionHandler.java
new file mode 100644
index 0000000..2c90226
--- /dev/null
+++ b/src/main/java/org/apache/log4j/spi/OptionHandler.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.log4j.spi;
+
+
+/**
+ A string based interface to configure package components.
+
+ @author Ceki Gülcü
+ @author Anders Kristensen
+ @since 0.8.1
+ */
+public interface OptionHandler {
+
+ /**
+ Activate the options that were previously set with calls to option
+ setters.
+
+ <p>This allows to defer activiation of the options until all
+ options have been set. This is required for components which have
+ related options that remain ambigous until all are set.
+
+ <p>For example, the FileAppender has the {@link
+ org.apache.log4j.FileAppender#setFile File} and {@link
+ org.apache.log4j.FileAppender#setAppend Append} options both of
+ which are ambigous until the other is also set. */
+ void activateOptions();
+
+ /**
+ Return list of strings that the OptionHandler instance recognizes.
+
+ @deprecated We now use JavaBeans style getters/setters.
+ */
+ // String[] getOptionStrings();
+
+ /**
+ Set <code>option</code> to <code>value</code>.
+
+ <p>The handling of each option depends on the OptionHandler
+ instance. Some options may become active immediately whereas
+ other may be activated only when {@link #activateOptions} is
+ called.
+
+ @deprecated We now use JavaBeans style getters/setters.
+ */
+ //void setOption(String option, String value);
+}
[3/4] logging-chainsaw git commit: Try to upgrade to Log4j 2
Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 6fe2a8b..4c092e4 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -338,10 +338,8 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
getActionMap().put("ESCAPE", closeLogPanelPreferencesFrameAction);
- setDetailPaneConversionPattern(
- DefaultLayoutFactory.getDefaultPatternLayout());
- detailLayout.setConversionPattern(
- DefaultLayoutFactory.getDefaultPatternLayout());
+ setDetailPaneConversionPattern(DefaultLayoutFactory.getDefaultPatternLayout());
+ detailLayout.setConversionPattern(DefaultLayoutFactory.getDefaultPatternLayout());
undockedFrame = new JFrame(identifier);
undockedFrame.setDefaultCloseOperation(
@@ -826,15 +824,15 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
for (Iterator iter = tableModel.getAllEvents().iterator();iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
- loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+ LogEventWrapper logEventWrapper = (LogEventWrapper)iter.next();
+ logEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(logEventWrapper.getLogEvent()), colorizer.getForegroundColor(logEventWrapper.getLogEvent()));
}
// no need to update searchmodel events since tablemodel and searchmodel share all events, and color rules aren't different between the two
// if that changes, un-do the color syncing in loggingeventwrapper & re-enable this code
//
// for (Iterator iter = searchModel.getAllEvents().iterator();iter.hasNext();) {
// LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
-// loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+// loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLogEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLogEvent()));
// }
colorizedEventAndSearchMatchThumbnail.configureColors();
lowerPanel.revalidate();
@@ -982,9 +980,9 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
//select a row in the main table when a row in the search table is selected
searchTable.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
- LoggingEventWrapper loggingEventWrapper = searchModel.getRow(searchTable.getSelectedRow());
- if (loggingEventWrapper != null) {
- int id = new Integer(loggingEventWrapper.getLoggingEvent().getProperty("log4jid")).intValue();
+ LogEventWrapper logEventWrapper = searchModel.getRow(searchTable.getSelectedRow());
+ if (logEventWrapper != null) {
+ int id = new Integer(logEventWrapper.getLogEvent().getProperty("log4jid")).intValue();
//preserve the table's viewble column
setSelectedEvent(id);
}
@@ -1031,7 +1029,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
//refilter with a newValue of FALSE means refiltering is complete
//assuming notification is called on the EDT so we can in the current EDT call update the scroll & selection
tableModel.addPropertyChangeListener("refilter", new PropertyChangeListener() {
- private LoggingEventWrapper currentEvent;
+ private LogEventWrapper currentEvent;
public void propertyChange(PropertyChangeEvent evt) {
//if new value is true, filtering is about to begin
//if new value is false, filtering is complete
@@ -1789,10 +1787,10 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
if (currentPoint != null) {
int row = currentTable.rowAtPoint(currentPoint);
ChainsawCyclicBufferTableModel cyclicBufferTableModel = (ChainsawCyclicBufferTableModel) currentTable.getModel();
- LoggingEventWrapper loggingEventWrapper = cyclicBufferTableModel.getRow(row);
- if (loggingEventWrapper != null)
+ LogEventWrapper logEventWrapper = cyclicBufferTableModel.getRow(row);
+ if (logEventWrapper != null)
{
- ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimes(loggingEventWrapper.getLoggingEvent().getTimeStamp());
+ ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimes(logEventWrapper.getLogEvent().getTimeStamp());
cyclicBufferTableModel.reFilter();
}
setEnabled(true);
@@ -1954,8 +1952,8 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
//exception - build message + throwable
String[] ti = (String[])o;
if (ti.length > 0 && (!(ti.length == 1 && ti[0].equals("")))) {
- LoggingEventWrapper loggingEventWrapper = ((ChainsawCyclicBufferTableModel)(currentTable.getModel())).getRow(row);
- value = loggingEventWrapper.getLoggingEvent().getMessage().toString();
+ LogEventWrapper logEventWrapper = ((ChainsawCyclicBufferTableModel)(currentTable.getModel())).getRow(row);
+ value = logEventWrapper.getLogEvent().getMessage().toString();
for (int i=0;i<((String[])o).length;i++) {
value = value + "\n" + ((String[]) o)[i];
}
@@ -2136,7 +2134,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
}
final int selectedRow = table.getSelectedRow();
final int startingRow = table.getRowCount();
- final LoggingEventWrapper selectedEvent;
+ final LogEventWrapper selectedEvent;
if (selectedRow >= 0) {
selectedEvent = tableModel.getRow(selectedRow);
} else {
@@ -2155,7 +2153,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
//these are actual LoggingEvent instances
LoggingEvent event = (LoggingEvent)iter.next();
//create two separate loggingEventWrappers (main table and search table), as they have different info on display state
- LoggingEventWrapper loggingEventWrapper1 = new LoggingEventWrapper(event);
+ LogEventWrapper logEventWrapper1 = new LogEventWrapper(event);
//if the clearTableExpressionRule is not null, evaluate & clear the table if it matches
if (clearTableExpressionRule != null && clearTableExpressionRule.evaluate(event, null)) {
logger.info("clear table expression matched - clearing table - matching event msg - " + event.getMessage());
@@ -2163,15 +2161,15 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
}
updateOtherModels(event);
- boolean isCurrentRowAdded = tableModel.isAddRow(loggingEventWrapper1);
+ boolean isCurrentRowAdded = tableModel.isAddRow(logEventWrapper1);
if (isCurrentRowAdded) {
addedRowCount++;
}
rowAdded = rowAdded || isCurrentRowAdded;
//create a new loggingEventWrapper via copy constructor to ensure same IDs
- LoggingEventWrapper loggingEventWrapper2 = new LoggingEventWrapper(loggingEventWrapper1);
- boolean isSearchCurrentRowAdded = searchModel.isAddRow(loggingEventWrapper2);
+ LogEventWrapper logEventWrapper2 = new LogEventWrapper(logEventWrapper1);
+ boolean isSearchCurrentRowAdded = searchModel.isAddRow(logEventWrapper2);
if (isSearchCurrentRowAdded) {
searchAddedRowCount++;
}
@@ -2979,7 +2977,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
*/
private void setDetailPaneConversionPattern(String conversionPattern) {
String oldPattern = getDetailPaneConversionPattern();
- (detailLayout).setConversionPattern(conversionPattern);
+ detailLayout.setConversionPattern(conversionPattern);
firePropertyChange(
"detailPaneConversionPattern", oldPattern,
getDetailPaneConversionPattern());
@@ -2991,7 +2989,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
* @return conversionPattern layout text
*/
private String getDetailPaneConversionPattern() {
- return (detailLayout).getConversionPattern();
+ return detailLayout.getConversionPattern();
}
/**
@@ -3247,9 +3245,9 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
return longestWidth + 5;
}
- private String getToolTipTextForEvent(LoggingEventWrapper loggingEventWrapper) {
+ private String getToolTipTextForEvent(LogEventWrapper logEventWrapper) {
StringBuffer buf = new StringBuffer();
- buf.append(detailLayout.getHeader()).append(detailLayout.format(loggingEventWrapper.getLoggingEvent())).append(detailLayout.getFooter());
+ buf.append(detailLayout.getHeader()).append(detailLayout.format(logEventWrapper.getLogEvent())).append(detailLayout.getFooter());
return buf.toString();
}
@@ -3311,13 +3309,13 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
public void toggleMarker() {
int row = table.getSelectedRow();
if (row != -1) {
- LoggingEventWrapper loggingEventWrapper = tableModel.getRow(row);
- if (loggingEventWrapper != null) {
- Object marker = loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ LogEventWrapper logEventWrapper = tableModel.getRow(row);
+ if (logEventWrapper != null) {
+ Object marker = logEventWrapper.getLogEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
if (marker == null) {
- loggingEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
+ logEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
} else {
- loggingEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ logEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
}
//if marker -was- null, it no longer is (may need to add the column)
tableModel.fireRowUpdated(row, (marker == null));
@@ -3499,17 +3497,17 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
if (evt.getClickCount() == 2) {
int row = markerTable.rowAtPoint(evt.getPoint());
if (row != -1) {
- LoggingEventWrapper loggingEventWrapper = markerEventContainer.getRow(row);
- if (loggingEventWrapper != null) {
- Object marker = loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ LogEventWrapper logEventWrapper = markerEventContainer.getRow(row);
+ if (logEventWrapper != null) {
+ Object marker = logEventWrapper.getLogEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
if (marker == null) {
- loggingEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
+ logEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, "set");
} else {
- loggingEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ logEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
}
//if marker -was- null, it no longer is (may need to add the column)
markerEventContainer.fireRowUpdated(row, (marker == null));
- otherMarkerEventContainer.fireRowUpdated(otherMarkerEventContainer.getRowIndex(loggingEventWrapper), (marker == null));
+ otherMarkerEventContainer.fireRowUpdated(otherMarkerEventContainer.getRowIndex(logEventWrapper), (marker == null));
}
}
}
@@ -3547,7 +3545,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
currentRow = row;
- LoggingEventWrapper event = detailEventContainer.getRow(currentRow);
+ LogEventWrapper event = detailEventContainer.getRow(currentRow);
if (event != null) {
String toolTipText = getToolTipTextForEvent(event);
@@ -3648,14 +3646,14 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
return;
}
- LoggingEventWrapper loggingEventWrapper = null;
+ LogEventWrapper logEventWrapper = null;
if (force || (selectedRow != -1 && (lastRow != selectedRow))) {
- loggingEventWrapper = tableModel.getRow(selectedRow);
+ logEventWrapper = tableModel.getRow(selectedRow);
- if (loggingEventWrapper != null) {
+ if (logEventWrapper != null) {
final StringBuffer buf = new StringBuffer();
buf.append(detailLayout.getHeader())
- .append(detailLayout.format(loggingEventWrapper.getLoggingEvent())).append(
+ .append(detailLayout.format(logEventWrapper.getLogEvent())).append(
detailLayout.getFooter());
if (buf.length() > 0) {
try {
@@ -3675,7 +3673,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
}
}
- if (loggingEventWrapper == null && (lastRow != selectedRow)) {
+ if (logEventWrapper == null && (lastRow != selectedRow)) {
try {
final Document doc = detail.getEditorKit().createDefaultDocument();
detail.getEditorKit().read(new StringReader("<html>Nothing selected</html>"), doc, 0);
@@ -3733,14 +3731,14 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
return;
}
- LoggingEventWrapper loggingEventWrapper = throwableEventContainer.getRow(throwableTable.getSelectedRow());
+ LogEventWrapper logEventWrapper = throwableEventContainer.getRow(throwableTable.getSelectedRow());
//throwable string representation may be a length-one empty array
- String[] ti = loggingEventWrapper.getLoggingEvent().getThrowableStrRep();
+ String[] ti = logEventWrapper.getLogEvent().getThrowableStrRep();
if (ti != null && ti.length > 0 && (!(ti.length == 1 && ti[0].equals("")))) {
detailDialog.setTitle(throwableTable.getColumnName(throwableTable.getSelectedColumn()) + " detail...");
StringBuffer buf = new StringBuffer();
- buf.append(loggingEventWrapper.getLoggingEvent().getMessage());
+ buf.append(logEventWrapper.getLogEvent().getMessage());
buf.append("\n");
for (int i = 0; i < ti.length; i++) {
buf.append(ti[i]).append("\n ");
@@ -3760,7 +3758,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
JTable currentTable;
JTextField textField = new JTextField();
Set cellEditorListeners = new HashSet();
- private LoggingEventWrapper currentLoggingEventWrapper;
+ private LogEventWrapper currentLogEventWrapper;
private final Object mutex = new Object();
public Object getCellEditorValue()
@@ -3782,13 +3780,13 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
public boolean stopCellEditing()
{
if (textField.getText().trim().equals("")) {
- currentLoggingEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
+ currentLogEventWrapper.removeProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE);
} else {
- currentLoggingEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, textField.getText());
+ currentLogEventWrapper.setProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE, textField.getText());
}
//row should always exist in the main table if it is being edited
- tableModel.fireRowUpdated(tableModel.getRowIndex(currentLoggingEventWrapper), true);
- int index = searchModel.getRowIndex(currentLoggingEventWrapper);
+ tableModel.fireRowUpdated(tableModel.getRowIndex(currentLogEventWrapper), true);
+ int index = searchModel.getRowIndex(currentLogEventWrapper);
if (index > -1) {
searchModel.fireRowUpdated(index, true);
}
@@ -3802,7 +3800,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
for (Iterator iter = cellEditorListenersCopy.iterator();iter.hasNext();) {
((CellEditorListener)iter.next()).editingStopped(event);
}
- currentLoggingEventWrapper = null;
+ currentLogEventWrapper = null;
currentTable = null;
return true;
@@ -3819,7 +3817,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
for (Iterator iter = cellEditorListenersCopy.iterator();iter.hasNext();) {
((CellEditorListener)iter.next()).editingCanceled(event);
}
- currentLoggingEventWrapper = null;
+ currentLogEventWrapper = null;
currentTable = null;
}
@@ -3840,9 +3838,9 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
currentTable = table;
- currentLoggingEventWrapper =((EventContainer) table.getModel()).getRow(row);
- if (currentLoggingEventWrapper != null) {
- textField.setText(currentLoggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE));
+ currentLogEventWrapper =((EventContainer) table.getModel()).getRow(row);
+ if (currentLogEventWrapper != null) {
+ textField.setText(currentLogEventWrapper.getLogEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE));
textField.selectAll();
}
else {
@@ -3859,7 +3857,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
}
boolean primaryMatches(ThumbnailLoggingEventWrapper wrapper) {
- String millisDelta = wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+ String millisDelta = wrapper.logEventWrapper.getLogEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
if (millisDelta != null && !millisDelta.trim().equals("")) {
long millisDeltaLong = Long.parseLong(millisDelta);
//arbitrary
@@ -3879,8 +3877,8 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
int i=0;
for (Iterator iter = tableModel.getFilteredEvents().iterator();iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
- ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, loggingEventWrapper);
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
+ ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, logEventWrapper);
i++;
//only add if there is a color defined
if (primaryMatches(wrapper)) {
@@ -3917,7 +3915,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
int startX = 1;
int width = getWidth() - (startX * 2);
//max out at 50, min 2...
- String millisDelta = wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+ String millisDelta = wrapper.logEventWrapper.getLogEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
long millisDeltaLong = Long.parseLong(millisDelta);
long delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, Math.max(0, (long) (millisDeltaLong * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
float widthMaxMillisDeltaRenderRatio = ((float)width / ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX);
@@ -3939,11 +3937,11 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
}
boolean primaryMatches(ThumbnailLoggingEventWrapper wrapper) {
- return !wrapper.loggingEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND);
+ return !wrapper.logEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND);
}
boolean secondaryMatches(ThumbnailLoggingEventWrapper wrapper) {
- return wrapper.loggingEventWrapper.isSearchMatch();
+ return wrapper.logEventWrapper.isSearchMatch();
}
private void configureColors() {
@@ -3952,8 +3950,8 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
int i=0;
for (Iterator iter = tableModel.getFilteredEvents().iterator();iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
- ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, loggingEventWrapper);
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
+ ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, logEventWrapper);
if (secondaryMatches(wrapper)) {
secondaryList.add(wrapper);
}
@@ -3985,8 +3983,8 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
//draw all non error/warning/marker events
for (Iterator iter = primaryList.iterator();iter.hasNext();) {
ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
- if (!wrapper.loggingEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
- if (wrapper.loggingEventWrapper.getLoggingEvent().getLevel().toInt() < Level.WARN.toInt() && wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE) == null) {
+ if (!wrapper.logEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
+ if (wrapper.logEventWrapper.getLogEvent().getLevel().toInt() < Level.WARN.toInt() && wrapper.logEventWrapper.getLogEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE) == null) {
float ratio = (wrapper.rowNum / (float)rowCount);
// System.out.println("error - ratio: " + ratio + ", component height: " + componentHeight);
int verticalLocation = (int) (componentHeight * ratio);
@@ -3994,7 +3992,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
int startX = 1;
int width = getWidth() - (startX * 2);
- drawEvent(wrapper.loggingEventWrapper.getColorRuleBackground(), verticalLocation, eventHeight, g, startX, width);
+ drawEvent(wrapper.logEventWrapper.getColorRuleBackground(), verticalLocation, eventHeight, g, startX, width);
// System.out.println("painting error - rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row count: " + rowCount);
}
}
@@ -4003,8 +4001,8 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
//draw warnings, error, fatal & markers last (full width)
for (Iterator iter = primaryList.iterator();iter.hasNext();) {
ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
- if (!wrapper.loggingEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
- if (wrapper.loggingEventWrapper.getLoggingEvent().getLevel().toInt() >= Level.WARN.toInt() || wrapper.loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE) != null) {
+ if (!wrapper.logEventWrapper.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)) {
+ if (wrapper.logEventWrapper.getLogEvent().getLevel().toInt() >= Level.WARN.toInt() || wrapper.logEventWrapper.getLogEvent().getProperty(ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE) != null) {
float ratio = (wrapper.rowNum / (float)rowCount);
// System.out.println("error - ratio: " + ratio + ", component height: " + componentHeight);
int verticalLocation = (int) (componentHeight * ratio);
@@ -4017,7 +4015,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
eventHeight = Math.min(maxEventHeight, eventHeight + 3);
// eventHeight = maxEventHeight;
- drawEvent(wrapper.loggingEventWrapper.getColorRuleBackground(), (verticalLocation - eventHeight + 1), eventHeight, g, startX, width);
+ drawEvent(wrapper.logEventWrapper.getColorRuleBackground(), (verticalLocation - eventHeight + 1), eventHeight, g, startX, width);
// System.out.println("painting error - rownum: " + wrapper.rowNum + ", location: " + verticalLocation + ", height: " + eventHeight + ", component height: " + componentHeight + ", row count: " + rowCount);
}
}
@@ -4053,7 +4051,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
int yPosition = e.getPoint().y;
ThumbnailLoggingEventWrapper event = getEventWrapperAtPosition(yPosition);
if (event != null) {
- setToolTipText(getToolTipTextForEvent(event.loggingEventWrapper));
+ setToolTipText(getToolTipTextForEvent(event.logEventWrapper));
}
} else {
setToolTipText(null);
@@ -4068,7 +4066,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
ThumbnailLoggingEventWrapper event = getEventWrapperAtPosition(yPosition);
// System.out.println("rowToSelect: " + rowToSelect + ", closestRow: " + event.loggingEvent.getProperty("log4jid"));
if (event != null) {
- int id = Integer.parseInt(event.loggingEventWrapper.getLoggingEvent().getProperty("log4jid"));
+ int id = Integer.parseInt(event.logEventWrapper.getLogEvent().getProperty("log4jid"));
setSelectedEvent(id);
}
}
@@ -4091,7 +4089,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
if (e.getType() == TableModelEvent.INSERT) {
// System.out.println("insert - current warnings: " + warnings.size() + ", errors: " + errors.size() + ", first row: " + firstRow + ", last row: " + lastRow);
for (int i=firstRow;i<lastRow;i++) {
- LoggingEventWrapper event = (LoggingEventWrapper)displayedEvents.get(i);
+ LogEventWrapper event = (LogEventWrapper)displayedEvents.get(i);
ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
if (secondaryMatches(wrapper)) {
secondaryList.add(wrapper);
@@ -4146,7 +4144,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
// System.out.println("update - after deleting old warnings in range: " + firstRow + " to " + lastRow + ", new warnings: " + warnings.size() + ", errors: " + errors.size());
//NOTE: for update, we need to do i<= lastRow
for (int i=firstRow;i<=lastRow;i++) {
- LoggingEventWrapper event = (LoggingEventWrapper)displayedEvents.get(i);
+ LogEventWrapper event = (LogEventWrapper)displayedEvents.get(i);
ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
// System.out.println("update - adding error: " + i + ", event: " + event.getMessage());
//only add event to thumbnail if there is a color
@@ -4253,14 +4251,14 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
class ThumbnailLoggingEventWrapper {
int rowNum;
- LoggingEventWrapper loggingEventWrapper;
- public ThumbnailLoggingEventWrapper(int rowNum, LoggingEventWrapper loggingEventWrapper) {
+ LogEventWrapper logEventWrapper;
+ public ThumbnailLoggingEventWrapper(int rowNum, LogEventWrapper logEventWrapper) {
this.rowNum = rowNum;
- this.loggingEventWrapper = loggingEventWrapper;
+ this.logEventWrapper = logEventWrapper;
}
public String toString() {
- return "event - rownum: " + rowNum + ", level: " + loggingEventWrapper.getLoggingEvent().getLevel();
+ return "event - rownum: " + rowNum + ", level: " + logEventWrapper.getLogEvent().getLevel();
}
public boolean equals(Object o) {
@@ -4273,7 +4271,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
ThumbnailLoggingEventWrapper that = (ThumbnailLoggingEventWrapper) o;
- if (loggingEventWrapper != null ? !loggingEventWrapper.equals(that.loggingEventWrapper) : that.loggingEventWrapper != null) {
+ if (logEventWrapper != null ? !logEventWrapper.equals(that.logEventWrapper) : that.logEventWrapper != null) {
return false;
}
@@ -4281,7 +4279,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
}
public int hashCode() {
- return loggingEventWrapper != null ? loggingEventWrapper.hashCode() : 0;
+ return logEventWrapper != null ? logEventWrapper.hashCode() : 0;
}
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/LogUI.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogUI.java b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
index e252fd0..11178a9 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogUI.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogUI.java
@@ -86,11 +86,9 @@ import javax.swing.event.EventListenerList;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
-import org.apache.log4j.Appender;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.LoggerRepositoryExImpl;
import org.apache.log4j.chainsaw.color.RuleColorizer;
import org.apache.log4j.chainsaw.dnd.FileDnDTarget;
@@ -116,8 +114,6 @@ import org.apache.log4j.plugins.PluginEvent;
import org.apache.log4j.plugins.PluginListener;
import org.apache.log4j.plugins.PluginRegistry;
import org.apache.log4j.plugins.Receiver;
-import org.apache.log4j.rewrite.PropertyRewritePolicy;
-import org.apache.log4j.rewrite.RewriteAppender;
import org.apache.log4j.rule.ExpressionRule;
import org.apache.log4j.rule.Rule;
import org.apache.log4j.spi.Decoder;
@@ -127,6 +123,12 @@ import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.RepositorySelector;
import org.apache.log4j.xml.DOMConfigurator;
import org.apache.log4j.xml.XMLDecoder;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.appender.rewrite.PropertiesRewritePolicy;
+import org.apache.logging.log4j.core.appender.rewrite.RewriteAppender;
+import org.apache.logging.log4j.core.appender.rewrite.RewritePolicy;
+import org.apache.logging.log4j.core.config.AppenderRef;
+import org.apache.logging.log4j.core.config.Property;
/**
@@ -367,22 +369,31 @@ public class LogUI extends JFrame implements ChainsawViewer, SettingsListener {
logUI.ensureChainsawAppenderHandlerAdded();
logger = LogManager.getLogger(LogUI.class);
- //set hostname, application and group properties which will cause Chainsaw and other apache-generated
- //logging events to route (by default) to a tab named 'chainsaw-log'
- PropertyRewritePolicy policy = new PropertyRewritePolicy();
- policy.setProperties("hostname=chainsaw,application=log,group=chainsaw");
-
- RewriteAppender rewriteAppender = new RewriteAppender();
- rewriteAppender.setRewritePolicy(policy);
-
- Enumeration appenders = Logger.getLogger("org.apache").getAllAppenders();
+ Enumeration<Appender> appenders = Logger.getLogger("org.apache").getAllAppenders();
if (!appenders.hasMoreElements()) {
appenders = Logger.getRootLogger().getAllAppenders();
}
+
+ ArrayList<AppenderRef> appenderRefs = new ArrayList<>();
while (appenders.hasMoreElements()) {
- Appender nextAppender = (Appender)appenders.nextElement();
- rewriteAppender.addAppender(nextAppender);
+ appenderRefs.add(AppenderRef.createAppenderRef(appenders.nextElement().getName(), Level.ALL, null));
}
+
+ //set hostname, application and group properties which will cause Chainsaw and other apache-generated
+ //logging events to route (by default) to a tab named 'chainsaw-log'
+ RewritePolicy policy = PropertiesRewritePolicy.createPolicy(configuration, new Property[] {
+ Property.createProperty("hostname", "chainsaw"),
+ Property.createProperty("application", "log"),
+ Property.createProperty("group", "chainsaw")
+ });
+ RewriteAppender rewriteAppender = RewriteAppender.createAppender(
+ "rewrite",
+ true,
+ appenderRefs,
+ configuration,
+ policy,
+ null);
+
Logger.getLogger("org.apache").removeAllAppenders();
Logger.getLogger("org.apache").addAppender(rewriteAppender);
Logger.getLogger("org.apache").setAdditivity(false);
@@ -2103,8 +2114,8 @@ public class LogUI extends JFrame implements ChainsawViewer, SettingsListener {
Iterator iter2 = panel.getMatchingEvents(rule).iterator();
while (iter2.hasNext()) {
- LoggingEventWrapper e = (LoggingEventWrapper) iter2.next();
- list.add(e.getLoggingEvent());
+ LogEventWrapper e = (LogEventWrapper) iter2.next();
+ list.add(e.getLogEvent());
}
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java b/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
deleted file mode 100644
index 63363a3..0000000
--- a/src/main/java/org/apache/log4j/chainsaw/LoggingEventWrapper.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.log4j.chainsaw;
-
-import java.awt.Color;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.log4j.helpers.Constants;
-import org.apache.log4j.rule.Rule;
-import org.apache.log4j.spi.LoggingEvent;
-
-/**
- * Wrap access to a LoggingEvent. All property updates need to go through this object and not through the wrapped logging event,
- * since the properties are shared by two views of the same backing LoggingEvent, and loggingEvent itself creates a copy of passed-in properties..
- *
- * Property reads can be made on the actual LoggingEvent.
- */
-public class LoggingEventWrapper {
- private final LoggingEvent loggingEvent;
- private static final int DEFAULT_HEIGHT = -1;
-
- private Color colorRuleBackground = ChainsawConstants.COLOR_DEFAULT_BACKGROUND;
- private Color colorRuleForeground = ChainsawConstants.COLOR_DEFAULT_FOREGROUND;
- private int markerHeight = DEFAULT_HEIGHT;
- private int msgHeight = DEFAULT_HEIGHT;
-
- //set to the log4jid value via setId - assumed to never change
- private int id;
-
- private boolean searchMatch = false;
- //a Map of event fields to Sets of string matches (can be used to render matches differently)
- Map eventMatches = new HashMap();
- private LoggingEventWrapper syncWrapper;
- private boolean displayed;
-
- public LoggingEventWrapper(LoggingEvent loggingEvent) {
- this.loggingEvent = loggingEvent;
- }
-
- public LoggingEventWrapper(LoggingEventWrapper loggingEventWrapper) {
- this.loggingEvent = loggingEventWrapper.getLoggingEvent();
- this.id = loggingEventWrapper.id;
- this.syncWrapper = loggingEventWrapper;
- loggingEventWrapper.syncWrapper = this;
- }
-
- public LoggingEvent getLoggingEvent() {
- return loggingEvent;
- }
-
- public void setProperty(String propName, String propValue) {
- loggingEvent.setProperty(propName, propValue);
- if (id == 0 && propName.equals(Constants.LOG4J_ID_KEY)) {
- id = Integer.parseInt(propValue);
- }
- if (syncWrapper != null && !propName.equals(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE)) {
- syncWrapper.getLoggingEvent().setProperty(propName, propValue);
- }
- }
-
- public Object removeProperty(String propName) {
- Object result = loggingEvent.removeProperty(propName);
- if (syncWrapper != null && !propName.equals(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE)) {
- syncWrapper.getLoggingEvent().removeProperty(propName);
- }
- return result;
- }
-
- public Set getPropertyKeySet() {
- return loggingEvent.getPropertyKeySet();
- }
-
- public void updateColorRuleColors(Color backgroundColor, Color foregroundColor) {
- if (backgroundColor != null && foregroundColor != null) {
- this.colorRuleBackground = backgroundColor;
- this.colorRuleForeground = foregroundColor;
- if (syncWrapper != null) {
- syncWrapper.colorRuleBackground = this.colorRuleBackground;
- syncWrapper.colorRuleForeground = this.colorRuleForeground;
- }
- } else {
- this.colorRuleBackground = ChainsawConstants.COLOR_DEFAULT_BACKGROUND;
- this.colorRuleForeground = ChainsawConstants.COLOR_DEFAULT_FOREGROUND;
- if (syncWrapper != null) {
- syncWrapper.colorRuleBackground = this.colorRuleBackground;
- syncWrapper.colorRuleForeground = this.colorRuleForeground;
- }
- }
- }
-
- public void evaluateSearchRule(Rule searchRule) {
- eventMatches.clear();
- searchMatch = searchRule != null && searchRule.evaluate(loggingEvent, eventMatches);
- }
-
- public Map getSearchMatches() {
- return eventMatches;
- }
-
- public Color getForeground() {
- return colorRuleForeground;
- }
-
- public Color getBackground() {
- return colorRuleBackground;
- }
-
- public Color getColorRuleBackground() {
- return colorRuleBackground;
- }
-
- public Color getColorRuleForeground() {
- return colorRuleForeground;
- }
-
- public boolean isSearchMatch() {
- return searchMatch;
- }
-
- public void setMarkerHeight(int markerHeight) {
- this.markerHeight = markerHeight;
- }
-
- public int getMarkerHeight() {
- return markerHeight;
- }
-
- public void setMsgHeight(int msgHeight) {
- this.msgHeight = msgHeight;
- }
-
- public int getMsgHeight() {
- return msgHeight;
- }
-
- public void setDisplayed(boolean b) {
- markerHeight = DEFAULT_HEIGHT;
- msgHeight = DEFAULT_HEIGHT;
- displayed = b;
- }
-
- public void setPreviousDisplayedEventTimestamp(long previousDisplayedEventTimeStamp) {
- setProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE, String.valueOf(loggingEvent.getTimeStamp() - previousDisplayedEventTimeStamp));
- }
-
- public boolean isDisplayed() {
- return displayed;
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- LoggingEventWrapper that = (LoggingEventWrapper) o;
-
- if (id != that.id) {
- return false;
- }
-
- return true;
- }
-
- public int hashCode() {
- return id;
- }
-
- public String toString() {
- return "LoggingEventWrapper - id: " + id + " background: " + getBackground() + ", foreground: " + getForeground() + ", msg: " + loggingEvent.getMessage();
- }
-}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
index 5d83d02..91451b8 100644
--- a/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/TableColorizingRenderer.java
@@ -173,8 +173,8 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
final JTable table, Object value, boolean isSelected, boolean hasFocus,
int row, int col) {
EventContainer container = (EventContainer) table.getModel();
- LoggingEventWrapper loggingEventWrapper = container.getRow(row);
- value = formatField(value, loggingEventWrapper);
+ LogEventWrapper logEventWrapper = container.getRow(row);
+ value = formatField(value, logEventWrapper);
TableColumn tableColumn = table.getColumnModel().getColumn(col);
int width = tableColumn.getWidth();
JLabel label = (JLabel)super.getTableCellRendererComponent(table, value,
@@ -183,16 +183,16 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
int colIndex = tableColumn.getModelIndex() + 1;
//no event, use default renderer
- if (loggingEventWrapper == null) {
+ if (logEventWrapper == null) {
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
}
long delta = 0;
if (row > 0) {
- LoggingEventWrapper previous = eventContainer.getRow(row - 1);
- delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, Math.max(0, (long) ((loggingEventWrapper.getLoggingEvent().getTimeStamp() - previous.getLoggingEvent().getTimeStamp()) * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
+ LogEventWrapper previous = eventContainer.getRow(row - 1);
+ delta = Math.min(ChainsawConstants.MILLIS_DELTA_RENDERING_HEIGHT_MAX, Math.max(0, (long) ((logEventWrapper.getLogEvent().getTimeStamp() - previous.getLogEvent().getTimeStamp()) * ChainsawConstants.MILLIS_DELTA_RENDERING_FACTOR)));
}
- Map matches = loggingEventWrapper.getSearchMatches();
+ Map matches = logEventWrapper.getSearchMatches();
JComponent component;
switch (colIndex) {
@@ -325,8 +325,8 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
textPane.setBorder(getMiddleBorder(isSelected, 0));
}
}
- int currentMarkerHeight = loggingEventWrapper.getMarkerHeight();
- int currentMsgHeight = loggingEventWrapper.getMsgHeight();
+ int currentMarkerHeight = logEventWrapper.getMarkerHeight();
+ int currentMsgHeight = logEventWrapper.getMsgHeight();
int newRowHeight = ChainsawConstants.DEFAULT_ROW_HEIGHT;
boolean setHeight = false;
@@ -351,15 +351,15 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
}
if (colIndex == ChainsawColumns.INDEX_LOG4J_MARKER_COL_NAME) {
- loggingEventWrapper.setMarkerHeight(newRowHeight);
- if (newRowHeight != currentMarkerHeight && newRowHeight >= loggingEventWrapper.getMsgHeight()) {
+ logEventWrapper.setMarkerHeight(newRowHeight);
+ if (newRowHeight != currentMarkerHeight && newRowHeight >= logEventWrapper.getMsgHeight()) {
setHeight = true;
}
}
if (colIndex == ChainsawColumns.INDEX_MESSAGE_COL_NAME) {
- loggingEventWrapper.setMsgHeight(newRowHeight);
- if (newRowHeight != currentMsgHeight && newRowHeight >= loggingEventWrapper.getMarkerHeight()) {
+ logEventWrapper.setMsgHeight(newRowHeight);
+ if (newRowHeight != currentMsgHeight && newRowHeight >= logEventWrapper.getMarkerHeight()) {
setHeight = true;
}
}
@@ -394,7 +394,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
//remaining entries are properties
default:
- Set propertySet = loggingEventWrapper.getPropertyKeySet();
+ Set propertySet = logEventWrapper.getPropertyKeySet();
String headerName = tableColumn.getHeaderValue().toString().toLowerCase();
String thisProp = null;
//find the property in the property set...case-sensitive
@@ -408,7 +408,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
if (thisProp != null) {
String propKey = LoggingEventFieldResolver.PROP_FIELD + thisProp.toUpperCase();
Set propKeyMatches = (Set)matches.get(propKey);
- singleLineTextPane.setText(loggingEventWrapper.getLoggingEvent().getProperty(thisProp));
+ singleLineTextPane.setText(logEventWrapper.getLogEvent().getProperty(thisProp));
setHighlightAttributesInternal(propKeyMatches, (StyledDocument) singleLineTextPane.getDocument());
} else {
singleLineTextPane.setText("");
@@ -422,16 +422,16 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
Color foreground;
Rule loggerRule = colorizer.getLoggerRule();
//use logger colors in table instead of event colors if event passes logger rule
- if (loggerRule != null && loggerRule.evaluate(loggingEventWrapper.getLoggingEvent(), null)) {
+ if (loggerRule != null && loggerRule.evaluate(logEventWrapper.getLogEvent(), null)) {
background = applicationPreferenceModel.getSearchBackgroundColor();
foreground = applicationPreferenceModel.getSearchForegroundColor();
} else {
if (colorizeSearch && !applicationPreferenceModel.isBypassSearchColors()) {
- background = loggingEventWrapper.isSearchMatch()?applicationPreferenceModel.getSearchBackgroundColor():loggingEventWrapper.getBackground();
- foreground = loggingEventWrapper.isSearchMatch()?applicationPreferenceModel.getSearchForegroundColor():loggingEventWrapper.getForeground();
+ background = logEventWrapper.isSearchMatch()?applicationPreferenceModel.getSearchBackgroundColor(): logEventWrapper.getBackground();
+ foreground = logEventWrapper.isSearchMatch()?applicationPreferenceModel.getSearchForegroundColor(): logEventWrapper.getForeground();
} else {
- background = loggingEventWrapper.getBackground();
- foreground = loggingEventWrapper.getForeground();
+ background = logEventWrapper.getBackground();
+ foreground = logEventWrapper.getForeground();
}
}
@@ -564,7 +564,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
*
* @return formatted object
*/
- private Object formatField(Object field, LoggingEventWrapper loggingEventWrapper) {
+ private Object formatField(Object field, LogEventWrapper logEventWrapper) {
if (!(field instanceof Date)) {
return (field == null ? "" : field);
}
@@ -574,7 +574,7 @@ public class TableColorizingRenderer extends DefaultTableCellRenderer {
return "" + (((Date)field).getTime() - relativeTimestampBase);
}
if (useRelativeTimesToPrevious) {
- return loggingEventWrapper.getLoggingEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
+ return logEventWrapper.getLogEvent().getProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE);
}
return dateFormatInUse.format((Date) field);
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java b/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
index 647a92c..f9236bf 100644
--- a/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
+++ b/src/main/java/org/apache/log4j/chainsaw/dnd/FileDnDTarget.java
@@ -17,7 +17,8 @@
package org.apache.log4j.chainsaw.dnd;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import java.awt.datatransfer.DataFlavor;
import java.awt.Color;
import java.awt.datatransfer.Transferable;
@@ -42,7 +43,7 @@ import javax.swing.JComponent;
* the standard PropertyChangesListener semantics to indicate that a list of
* files have been dropped onto the target.
*
- * If you wish to know whan the files have been dropped, subscribe to the "fileList" property change.
+ * If you wish to know what the files have been dropped, subscribe to the "fileList" property change.
*
* @author psmith
*
@@ -51,7 +52,7 @@ public class FileDnDTarget implements DropTargetListener{
/**
* Logger for this class
*/
- private static final Logger LOG = Logger.getLogger(FileDnDTarget.class);
+ private static final Logger LOG = LogManager.getLogger(FileDnDTarget.class);
protected int acceptableActions = DnDConstants.ACTION_COPY;
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java b/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
index 1b1670d..98010a4 100644
--- a/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/filter/FilterModel.java
@@ -17,8 +17,8 @@
package org.apache.log4j.chainsaw.filter;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.LocationInfo;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.core.LogEvent;
/**
* This class is used as a Model for Filtering, and retains the unique entries that
@@ -31,16 +31,16 @@ public class FilterModel {
private EventTypeEntryContainer eventContainer =
new EventTypeEntryContainer();
- public void processNewLoggingEvent(LoggingEvent event) {
+ public void processNewLoggingEvent(LogEvent event) {
eventContainer.addLevel(event.getLevel());
eventContainer.addLogger(event.getLoggerName());
eventContainer.addThread(event.getThreadName());
- eventContainer.addNDC(event.getNDC());
- eventContainer.addProperties(event.getProperties());
+ eventContainer.addNDC(StringUtils.join(event.getContextStack().asList(), ' '));
+ eventContainer.addProperties(event.getContextMap());
- if (event.locationInformationExists()) {
- LocationInfo info = event.getLocationInformation();
+ StackTraceElement info = event.getSource();
+ if (info != null) {
eventContainer.addClass(info.getClassName());
eventContainer.addMethod(info.getMethodName());
eventContainer.addFileName(info.getFileName());
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java b/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
index 1ac3533..cce002e 100644
--- a/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/help/HelpLocator.java
@@ -25,8 +25,8 @@ import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.chainsaw.messages.MessageCenter;
/**
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java b/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
index e5eec55..82418df 100644
--- a/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
+++ b/src/main/java/org/apache/log4j/chainsaw/help/HelpManager.java
@@ -23,14 +23,14 @@ import java.beans.PropertyChangeSupport;
import java.io.File;
import java.net.URL;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.chainsaw.ChainsawConstants;
/**
* Singleton help manager where objects can register to display
- * Help for something, an independant viewer can register to
+ * Help for something, an independent viewer can register to
* be notified when the requested Help URL changes and can display
* it appropriately. This class effectively decouples the help requester
* from the help implementation (if any!)
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java b/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
index a7891c4..0524ecb 100644
--- a/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
+++ b/src/main/java/org/apache/log4j/chainsaw/icons/LineIconFactory.java
@@ -29,8 +29,8 @@ import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
/**
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
index 8f463df..a128e76 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/EventDetailLayout.java
@@ -17,15 +17,14 @@
package org.apache.log4j.chainsaw.layout;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Set;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.util.TriConsumer;
-import org.apache.log4j.EnhancedPatternLayout;
-import org.apache.log4j.Layout;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LocationInfo;
-import org.apache.log4j.spi.LoggingEvent;
+import java.util.HashMap;
+import java.util.Map;
/**
@@ -34,99 +33,33 @@ import org.apache.log4j.spi.LoggingEvent;
* when mouse-over on a particular log event row.
*
* It relies an an internal PatternLayout to accomplish this, but ensures HTML characters
- * from any LoggingEvent are escaped first.
+ * from any LogEvent are escaped first.
*
* @author Paul Smith <psmith@apache.org>
*/
-public class EventDetailLayout extends Layout {
- private EnhancedPatternLayout patternLayout = new EnhancedPatternLayout();
+public class EventDetailLayout {
+ private PatternLayout patternLayout;
- public EventDetailLayout() {
+ public synchronized void setConversionPattern(String conversionPattern) {
+ patternLayout = PatternLayout.newBuilder().withPattern(conversionPattern).build();
}
- public void setConversionPattern(String conversionPattern) {
- patternLayout.setConversionPattern(conversionPattern);
- patternLayout.activateOptions();
- }
-
- public String getConversionPattern() {
+ public synchronized String getConversionPattern() {
return patternLayout.getConversionPattern();
}
- /* (non-Javadoc)
- * @see org.apache.log4j.Layout#getFooter()
- */
public String getFooter() {
return "";
}
- /* (non-Javadoc)
- * @see org.apache.log4j.Layout#getHeader()
- */
public String getHeader() {
return "";
}
- // /* (non-Javadoc)
- // * @see org.apache.log4j.Layout#format(java.io.Writer, org.apache.log4j.spi.LoggingEvent)
- // */
- // public void format(Writer output, LoggingEvent event)
- // throws IOException {
- // boolean pastFirst = false;
- // output.write("<html><body><table cellspacing=0 cellpadding=0>");
- //
- // List columnNames = ChainsawColumns.getColumnsNames();
- //
- // Vector v = ChainsawAppenderHandler.convert(event);
- //
- // /**
- // * we need to add the ID property from the event
- // */
- // v.add(event.getProperty(ChainsawConstants.LOG4J_ID_KEY));
- //
- // // ListIterator iter = displayFilter.getDetailColumns().listIterator();
- // Iterator iter = columnNames.iterator();
- // String column = null;
- // int index = -1;
- //
- // while (iter.hasNext()) {
- // column = (String) iter.next();
- // index = columnNames.indexOf(column);
- //
- // if (index > -1) {
- // if (pastFirst) {
- // output.write("</td></tr>");
- // }
- //
- // output.write("<tr><td valign=\"top\"><b>");
- // output.write(column);
- // output.write(": </b></td><td>");
- //
- //
- // if (index<v.size()) {
- // Object o = v.get(index);
- //
- // if (o != null) {
- // output.write(escape(o.toString()));
- // } else {
- // output.write("{null}");
- // }
- //
- // }else {
- //// output.write("Invalid column " + column + " (index=" + index + ")");
- // }
- //
- // pastFirst = true;
- // }
- // }
- //
- // output.write("</table></body></html>");
- // }
-
/**
* Escape <, > & and " as their entities. It is very
* dumb about & handling.
- * @param aStr the String to escape.
+ * @param string the String to escape.
* @return the escaped String
*/
private static String escape(String string) {
@@ -134,7 +67,7 @@ public class EventDetailLayout extends Layout {
return "";
}
- final StringBuffer buf = new StringBuffer();
+ final StringBuilder buf = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
@@ -142,28 +75,22 @@ public class EventDetailLayout extends Layout {
switch (c) {
case '<':
buf.append("<");
-
break;
case '>':
buf.append(">");
-
break;
case '\"':
buf.append(""");
-
break;
case '&':
buf.append("&");
-
break;
default:
buf.append(c);
-
- break;
}
}
@@ -171,109 +98,65 @@ public class EventDetailLayout extends Layout {
}
/**
- * Takes a source event and copies it into a new LoggingEvent object
+ * Takes a source event and copies it into a new LogEvent object
* and ensuring all the internal elements of the event are HTML safe
* @param event
- * @return new LoggingEvent
+ * @return new LogEvent
*/
- private static LoggingEvent copyForHTML(LoggingEvent event) {
- Logger logger = Logger.getLogger(event.getLoggerName());
- String threadName = event.getThreadName();
- Object msg = escape(event.getMessage().toString());
- String ndc = event.getNDC();
-// Hashtable mdc = formatMDC(event);
- LocationInfo li = null;
- if (event.locationInformationExists()) {
+ private static LogEvent copyForHTML(LogEvent event) {
+ String msg = escape(event.getMessage().getFormattedMessage());
+ StackTraceElement li = null;
+ if (event.getSource() != null) {
li = formatLocationInfo(event);
}
- Hashtable properties = formatProperties(event);
- LoggingEvent copy = new LoggingEvent(null,
- logger, event.getTimeStamp(),
- event.getLevel(),
- msg,
- threadName,
- event.getThrowableInformation(),
- ndc,
- li,
- properties);
-
- return copy;
+ Map<String, String> properties = formatProperties(event);
+
+ return Log4jLogEvent.newBuilder()
+ .setLoggerFqcn(event.getLoggerFqcn())
+ .setLoggerName(event.getLoggerName())
+ .setTimeMillis(event.getTimeMillis())
+ .setNanoTime(event.getNanoTime())
+ .setLevel(event.getLevel())
+ .setMessage(new SimpleMessage(msg))
+ .setThreadName(event.getThreadName())
+ .setThreadId(event.getThreadId())
+ .setThreadPriority(event.getThreadPriority())
+ .setThrownProxy(event.getThrownProxy())
+ .setContextStack(event.getContextStack())
+ .setContextMap(properties)
+ .setSource(li)
+ .setMarker(event.getMarker())
+ .build();
}
-// /**
-// * @param event
-// * @return
-// */
-// private static Hashtable formatMDC(LoggingEvent event) {
-// Set keySet = event.getMDCKeySet();
-// Hashtable hashTable = new Hashtable();
-//
-// for (Iterator iter = keySet.iterator(); iter.hasNext();) {
-// Object key = (Object) iter.next();
-// Object value = event.getMDC(key.toString());
-// hashTable.put(escape(key.toString()), escape(value.toString()));
-// }
-//
-// return hashTable;
-// }
-
- /**
- * @param event
- * @return
- */
- private static LocationInfo formatLocationInfo(LoggingEvent event) {
- LocationInfo info = event.getLocationInformation();
- LocationInfo newInfo =
- new LocationInfo(
- escape(info.getFileName()), escape(info.getClassName()),
- escape(info.getMethodName()), escape(info.getLineNumber()));
-
- return newInfo;
+ private static StackTraceElement formatLocationInfo(LogEvent event) {
+ StackTraceElement info = event.getSource();
+ return new StackTraceElement(
+ escape(info.getFileName()), escape(info.getClassName()),
+ escape(info.getMethodName()), info.getLineNumber());
}
- /**
- * @param event
- * @return
- */
- private static Hashtable formatProperties(LoggingEvent event) {
- Set keySet = event.getPropertyKeySet();
- Hashtable hashTable = new Hashtable();
-
- for (Iterator iter = keySet.iterator(); iter.hasNext();) {
- Object key = iter.next();
- Object value = event.getProperty(key.toString());
- hashTable.put(escape(key.toString()), escape(value.toString()));
- }
-
+ private static Map<String, String> formatProperties(LogEvent event) {
+ Map<String, String> hashTable = new HashMap<>();
+ event.getContextData().forEach(new TriConsumer<String, String, Map<String, String>>() {
+ @Override
+ public void accept(String key, String value, Map<String, String> state) {
+ state.put(escape(key), escape(value));
+ }
+ }, hashTable);
return hashTable;
}
- /* (non-Javadoc)
- * @see org.apache.log4j.Layout#ignoresThrowable()
- */
- public boolean ignoresThrowable() {
- return false;
- }
-
- /* (non-Javadoc)
- * @see org.apache.log4j.spi.OptionHandler#activateOptions()
- */
- public void activateOptions() {
- }
-
- /* (non-Javadoc)
- * @see org.apache.log4j.Layout#format(java.io.Writer, org.apache.log4j.spi.LoggingEvent)
- */
- public String format(final LoggingEvent event) {
- LoggingEvent newEvent = copyForHTML(event);
- /**
+ public String format(final LogEvent event) {
+ LogEvent newEvent = copyForHTML(event);
+ /*
* Layouts are not thread-safe, but are normally
* protected by the fact that their Appender is thread-safe.
*
* But here in Chainsaw there is no such guarantees.
*/
- synchronized(patternLayout) {
- return patternLayout.format(newEvent);
+ synchronized (this) {
+ return patternLayout.toSerializable(newEvent);
}
}
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
index dd27fb9..b8f7688 100644
--- a/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
+++ b/src/main/java/org/apache/log4j/chainsaw/layout/LayoutEditorPane.java
@@ -21,8 +21,10 @@ import java.awt.Dimension;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.util.Arrays;
import java.util.Date;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.Action;
@@ -42,18 +44,20 @@ import javax.swing.event.CaretListener;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
import org.apache.log4j.chainsaw.ChainsawConstants;
import org.apache.log4j.chainsaw.JTextComponentFormatter;
import org.apache.log4j.chainsaw.icons.ChainsawIcons;
-import org.apache.log4j.spi.LocationInfo;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.ThrowableInformation;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.spi.MutableThreadContextStack;
/**
* An editor Pane that allows a user to Edit a Pattern Layout and preview the output it would
- * generate with an example LoggingEvent
+ * generate with an example LogEvent
*
* @author Paul Smith <psmith@apache.org>
*
@@ -78,7 +82,7 @@ public final class LayoutEditorPane extends JPanel {
new JScrollPane(
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
- private LoggingEvent event;
+ private LogEvent event;
private EventDetailLayout layout = new EventDetailLayout();
/**
@@ -94,9 +98,6 @@ public final class LayoutEditorPane extends JPanel {
setupListeners();
}
- /**
- * @return
- */
private Action createCutAction() {
final Action action =
new AbstractAction("Cut", ChainsawIcons.ICON_CUT) {
@@ -110,9 +111,6 @@ public final class LayoutEditorPane extends JPanel {
return action;
}
- /**
- * @return
- */
private Action createCopyAction() {
final Action action =
new AbstractAction("Copy", ChainsawIcons.ICON_COPY) {
@@ -126,9 +124,6 @@ public final class LayoutEditorPane extends JPanel {
return action;
}
- /**
- *
- */
private void setupListeners() {
patternEditor.getDocument().addDocumentListener(
new DocumentListener() {
@@ -172,28 +167,29 @@ public final class LayoutEditorPane extends JPanel {
*
*/
private void createEvent() {
- Hashtable hashTable = new Hashtable();
- hashTable.put("key1", "val1");
- hashTable.put("key2", "val2");
- hashTable.put("key3", "val3");
-
- LocationInfo li =
- new LocationInfo(
- "myfile.java", "com.mycompany.util.MyClass", "myMethod", "321");
-
- ThrowableInformation tsr = new ThrowableInformation(new Exception());
-
- event = new LoggingEvent("org.apache.log4j.Logger",
- Logger.getLogger("com.mycompany.mylogger"),
- new Date().getTime(),
- org.apache.log4j.Level.DEBUG,
- "The quick brown fox jumped over the lazy dog",
- "Thread-1",
- tsr,
- "NDC string",
- li,
- hashTable);
-
+ Map<String, String> contextMap = new HashMap<>(3);
+ contextMap.put("key1", "val1");
+ contextMap.put("key2", "val2");
+ contextMap.put("key3", "val3");
+
+ StackTraceElement li =
+ new StackTraceElement(
+ "myfile.java", "com.mycompany.util.MyClass", "myMethod", 321);
+
+ ThrowableProxy tsr = new ThrowableProxy(new Exception());
+
+ event = Log4jLogEvent.newBuilder()
+ .setLoggerFqcn("org.apache.log4j.Logger")
+ .setLoggerName("com.mycompany.mylogger")
+ .setTimeMillis(new Date().getTime())
+ .setLevel(Level.DEBUG)
+ .setMessage(new SimpleMessage("The quick brown fox jumped over the lazy dog"))
+ .setThreadName("Thread-1")
+ .setThrownProxy(tsr)
+ .setContextStack(new MutableThreadContextStack(Arrays.asList("NDC", "string")))
+ .setContextMap(contextMap)
+ .setSource(li)
+ .build();
}
/**
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java b/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
index bf858b5..4e7a052 100644
--- a/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
+++ b/src/main/java/org/apache/log4j/chainsaw/messages/MessageCenter.java
@@ -40,16 +40,17 @@ import javax.swing.ListModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
-import org.apache.log4j.Layout;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.TTCCLayout;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.chainsaw.ChainsawConstants;
-import org.apache.log4j.chainsaw.LoggingEventWrapper;
+import org.apache.log4j.chainsaw.LogEventWrapper;
import org.apache.log4j.chainsaw.PopupListener;
import org.apache.log4j.chainsaw.SmallButton;
import org.apache.log4j.chainsaw.icons.ChainsawIcons;
import org.apache.log4j.varia.ListModelAppender;
+import org.apache.logging.log4j.core.layout.PatternLayout;
/**
@@ -73,8 +74,8 @@ import org.apache.log4j.varia.ListModelAppender;
*/
public class MessageCenter {
private static final MessageCenter instance = new MessageCenter();
- private final Logger logger = Logger.getLogger(MessageCenter.class);
- private Layout layout = new TTCCLayout();
+ private final Logger logger = LogManager.getLogger(MessageCenter.class);
+ private Layout layout = PatternLayout.newBuilder().withPattern(PatternLayout.TTCC_CONVERSION_PATTERN).build();
private final JList messageList = new JList();
private final ListModelAppender appender = new ListModelAppender();
private ListCellRenderer listCellRenderer =
@@ -241,7 +242,7 @@ public class MessageCenter {
public Component getListCellRendererComponent(
JList list, Object value, int index, boolean isSelected,
boolean cellHasFocus) {
- value = layout.format(((LoggingEventWrapper) value).getLoggingEvent());
+ value = layout.format(((LogEventWrapper) value).getLogEvent());
Component c =
super.getListCellRendererComponent(
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java b/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
index dec20b0..110c39f 100644
--- a/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
+++ b/src/main/java/org/apache/log4j/chainsaw/osx/OSXIntegration.java
@@ -21,7 +21,8 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.chainsaw.LogUI;
@@ -38,7 +39,7 @@ import org.apache.log4j.chainsaw.LogUI;
*/
public class OSXIntegration {
public static final boolean IS_OSX = System.getProperty("os.name").startsWith("Mac OS X");
- private static final Logger LOG = Logger.getLogger(OSXIntegration.class);
+ private static final Logger LOG = LogManager.getLogger(OSXIntegration.class);
private static Object applicationInstance;
public static final void init(final LogUI logui) {
LOG.info("OSXIntegration.init() called");
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
index baf45a1..8425943 100644
--- a/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/receivers/ReceiversPanel.java
@@ -58,9 +58,9 @@ import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.ExpandVetoException;
import javax.swing.tree.TreePath;
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.chainsaw.PopupListener;
import org.apache.log4j.chainsaw.SmallButton;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
index 89574d2..1d8b69e 100644
--- a/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
+++ b/src/main/java/org/apache/log4j/chainsaw/zeroconf/ZeroConfPlugin.java
@@ -48,9 +48,8 @@ import javax.swing.SwingUtilities;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
-import org.apache.log4j.BasicConfigurator;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.chainsaw.ChainsawConstants;
import org.apache.log4j.chainsaw.LogFilePatternLayoutBuilder;
import org.apache.log4j.chainsaw.SmallButton;
@@ -59,7 +58,6 @@ import org.apache.log4j.chainsaw.icons.ChainsawIcons;
import org.apache.log4j.chainsaw.plugins.GUIPluginSkeleton;
import org.apache.log4j.chainsaw.prefs.SettingsManager;
import org.apache.log4j.chainsaw.vfs.VFSLogFilePatternReceiver;
-import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.net.MulticastReceiver;
import org.apache.log4j.net.SocketHubReceiver;
import org.apache.log4j.net.SocketReceiver;
@@ -74,6 +72,7 @@ import org.apache.log4j.spi.LoggerRepositoryEx;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
+import org.apache.logging.log4j.status.StatusLogger;
/**
* This plugin is designed to detect specific Zeroconf zones (Rendevouz/Bonjour,
@@ -90,7 +89,7 @@ import com.thoughtworks.xstream.io.xml.DomDriver;
*/
public class ZeroConfPlugin extends GUIPluginSkeleton {
- private static final Logger LOG = Logger.getLogger(ZeroConfPlugin.class);
+ private static final Logger LOG = LogManager.getLogger(ZeroConfPlugin.class);
private ZeroConfDeviceModel discoveredDevices = new ZeroConfDeviceModel();
@@ -588,7 +587,7 @@ public class ZeroConfPlugin extends GUIPluginSkeleton {
return receiver;
}
//not recognized
- LogLog.debug("Unable to find receiver for appender with service name: " + zone);
+ StatusLogger.getLogger().debug("Unable to find receiver for appender with service name: " + zone);
return null;
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/db/DBReceiver.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/db/DBReceiver.java b/src/main/java/org/apache/log4j/db/DBReceiver.java
index dbd1ef5..dbef7de 100644
--- a/src/main/java/org/apache/log4j/db/DBReceiver.java
+++ b/src/main/java/org/apache/log4j/db/DBReceiver.java
@@ -21,11 +21,6 @@ import org.apache.log4j.plugins.Pauseable;
import org.apache.log4j.plugins.Receiver;
import org.apache.log4j.scheduler.Scheduler;
import org.apache.log4j.spi.LoggerRepositoryEx;
-import org.apache.log4j.xml.DOMConfigurator;
-import org.apache.log4j.xml.UnrecognizedElementHandler;
-import org.w3c.dom.Element;
-
-import java.util.Properties;
/**
*
@@ -33,7 +28,7 @@ import java.util.Properties;
* @author Ceki Gülcü
*
*/
-public class DBReceiver extends Receiver implements Pauseable, UnrecognizedElementHandler {
+public class DBReceiver extends Receiver implements Pauseable {
/**
* By default we refresh data every 1000 milliseconds.
* @see #setRefreshMillis
@@ -120,21 +115,4 @@ public class DBReceiver extends Receiver implements Pauseable, UnrecognizedEleme
return paused;
}
- /**
- * {@inheritDoc}
- */
- public boolean parseUnrecognizedElement(Element element, Properties props) throws Exception {
- if ("connectionSource".equals(element.getNodeName())) {
- Object instance =
- DOMConfigurator.parseElement(element, props, ConnectionSource.class);
- if (instance instanceof ConnectionSource) {
- ConnectionSource source = (ConnectionSource) instance;
- source.activateOptions();
- setConnectionSource(source);
- }
- return true;
- }
- return false;
- }
-
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/db/DBReceiverJob.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/db/DBReceiverJob.java b/src/main/java/org/apache/log4j/db/DBReceiverJob.java
index 1e29663..6e5dcea 100644
--- a/src/main/java/org/apache/log4j/db/DBReceiverJob.java
+++ b/src/main/java/org/apache/log4j/db/DBReceiverJob.java
@@ -17,19 +17,24 @@
package org.apache.log4j.db;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.log4j.scheduler.Job;
import org.apache.log4j.spi.ComponentBase;
-import org.apache.log4j.spi.LocationInfo;
-import org.apache.log4j.spi.LoggingEvent;
-import org.apache.log4j.spi.ThrowableInformation;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.spi.MutableThreadContextStack;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
-import java.util.Hashtable;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Vector;
/**
@@ -77,19 +82,19 @@ class DBReceiverJob extends ComponentBase implements Job {
long timeStamp = 0L;
String level = null;
String threadName = null;
- Object message = null;
+ String message = null;
String ndc = null;
String className = null;
String methodName = null;
String fileName = null;
String lineNumber = null;
- Hashtable properties = new Hashtable();
+ Map<String, String> properties = new HashMap<>();
//event.setSequenceNumber(rs.getLong(1));
timeStamp = rs.getLong(2);
message = rs.getString(3);
- logger = Logger.getLogger(rs.getString(4));
+ logger = LogManager.getLogger(rs.getString(4));
level = rs.getString(5);
Level levelImpl = Level.toLevel(level.trim());
@@ -103,42 +108,43 @@ class DBReceiverJob extends ComponentBase implements Job {
methodName = rs.getString(11);
lineNumber = rs.getString(12).trim();
- LocationInfo locationInfo = null;
- if (fileName.equals(LocationInfo.NA)) {
- locationInfo = LocationInfo.NA_LOCATION_INFO;
+ StackTraceElement locationInfo;
+ if (fileName.equals("?")) {
+ locationInfo = null;
} else {
- locationInfo = new LocationInfo(fileName, className,
- methodName, lineNumber);
+ locationInfo = new StackTraceElement(fileName, className,
+ methodName, Integer.parseInt(lineNumber));
}
long id = rs.getLong(13);
//LogLog.info("Received event with id=" + id);
lastId = id;
- ThrowableInformation throwableInfo = null;
+ ThrowableProxy throwableInfo = null;
if ((mask & DBHelper.EXCEPTION_EXISTS) != 0) {
throwableInfo = getException(connection, id);
}
- LoggingEvent event = new LoggingEvent(logger.getName(),
- logger, timeStamp, levelImpl, message,
- threadName,
- throwableInfo,
- ndc,
- locationInfo,
- properties);
-
-
// Scott asked for this info to be
- event.setProperty("log4jid", Long.toString(id));
+ properties.put("log4jid", Long.toString(id));
+
+ LogEvent event = Log4jLogEvent.newBuilder()
+ .setLoggerFqcn(logger.getName())
+ .setLoggerName(logger.getName())
+ .setTimeMillis(timeStamp)
+ .setLevel(levelImpl)
+ .setMessage(new SimpleMessage(message))
+ .setThreadName(threadName)
+ .setThrownProxy(throwableInfo)
+ .setContextStack(new MutableThreadContextStack(Arrays.asList(ndc.split(" "))))
+ .setContextMap(properties)
+ .setSource(locationInfo)
+ .build();
if ((mask & DBHelper.PROPERTIES_EXIST) != 0) {
getProperties(connection, id, event);
}
-
-
-
if (!parentDBReceiver.isPaused()) {
parentDBReceiver.doPost(event);
}
@@ -171,7 +177,7 @@ class DBReceiverJob extends ComponentBase implements Job {
* @param event
* @throws SQLException
*/
- void getProperties(Connection connection, long id, LoggingEvent event)
+ void getProperties(Connection connection, long id, LogEvent event)
throws SQLException {
PreparedStatement statement = connection.prepareStatement(sqlProperties);
@@ -182,7 +188,7 @@ class DBReceiverJob extends ComponentBase implements Job {
while (rs.next()) {
String key = rs.getString(1);
String value = rs.getString(2);
- event.setProperty(key, value);
+ event.getContextMap().put(key, value);
}
} finally {
statement.close();
@@ -197,7 +203,7 @@ class DBReceiverJob extends ComponentBase implements Job {
* @param id
* @throws SQLException
*/
- ThrowableInformation getException(Connection connection, long id)
+ ThrowableProxy getException(Connection connection, long id)
throws SQLException {
PreparedStatement statement = null;
@@ -220,7 +226,7 @@ class DBReceiverJob extends ComponentBase implements Job {
strRep[i] = (String) v.get(i);
}
// we've filled strRep, we now attach it to the event
- return new ThrowableInformation(strRep);
+ return new ThrowableProxy(strRep);
} finally {
if (statement != null) {
statement.close();
[4/4] logging-chainsaw git commit: Try to upgrade to Log4j 2
Posted by mi...@apache.org.
Try to upgrade to Log4j 2
Project: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/commit/deb3b3c0
Tree: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/tree/deb3b3c0
Diff: http://git-wip-us.apache.org/repos/asf/logging-chainsaw/diff/deb3b3c0
Branch: refs/heads/log4j-2
Commit: deb3b3c04ee16b63d037798dccec43d1e0ca2674
Parents: a92fbca
Author: Mikael Ståldal <mi...@staldal.nu>
Authored: Mon Nov 20 21:34:18 2017 +0100
Committer: Mikael Ståldal <mi...@staldal.nu>
Committed: Mon Nov 20 21:34:18 2017 +0100
----------------------------------------------------------------------
pom.xml | 24 +-
.../apache/log4j/LoggerRepositoryExImpl.java | 77 ++---
.../ChainsawCyclicBufferTableModel.java | 138 ++++----
.../apache/log4j/chainsaw/ColumnComparator.java | 6 +-
.../chainsaw/CopyEventsToClipboardAction.java | 2 +-
.../apache/log4j/chainsaw/EventContainer.java | 8 +-
.../apache/log4j/chainsaw/FileSaveAction.java | 6 +-
.../apache/log4j/chainsaw/LogEventWrapper.java | 189 ++++++++++
.../chainsaw/LogFilePatternLayoutBuilder.java | 199 +++++------
.../org/apache/log4j/chainsaw/LogPanel.java | 156 +++++----
.../java/org/apache/log4j/chainsaw/LogUI.java | 51 +--
.../log4j/chainsaw/LoggingEventWrapper.java | 190 ----------
.../log4j/chainsaw/TableColorizingRenderer.java | 42 +--
.../log4j/chainsaw/dnd/FileDnDTarget.java | 7 +-
.../log4j/chainsaw/filter/FilterModel.java | 14 +-
.../apache/log4j/chainsaw/help/HelpLocator.java | 4 +-
.../apache/log4j/chainsaw/help/HelpManager.java | 6 +-
.../log4j/chainsaw/icons/LineIconFactory.java | 4 +-
.../chainsaw/layout/EventDetailLayout.java | 231 +++----------
.../log4j/chainsaw/layout/LayoutEditorPane.java | 72 ++--
.../log4j/chainsaw/messages/MessageCenter.java | 17 +-
.../log4j/chainsaw/osx/OSXIntegration.java | 5 +-
.../chainsaw/receivers/ReceiversPanel.java | 6 +-
.../log4j/chainsaw/zeroconf/ZeroConfPlugin.java | 11 +-
.../java/org/apache/log4j/db/DBReceiver.java | 24 +-
.../java/org/apache/log4j/db/DBReceiverJob.java | 70 ++--
.../apache/log4j/helpers/UtilLoggingLevel.java | 140 ++------
.../org/apache/log4j/net/MulticastAppender.java | 345 -------------------
.../java/org/apache/log4j/net/SocketNode13.java | 18 +-
.../org/apache/log4j/net/SocketReceiver.java | 4 +-
.../java/org/apache/log4j/net/UDPAppender.java | 330 ------------------
.../org/apache/log4j/net/ZeroConfSupport.java | 193 +++++++++++
.../org/apache/log4j/or/DefaultRenderer.java | 42 +++
.../org/apache/log4j/or/ObjectRenderer.java | 32 ++
.../java/org/apache/log4j/or/RendererMap.java | 199 +++++++++++
.../java/org/apache/log4j/plugins/Plugin.java | 2 +-
.../java/org/apache/log4j/plugins/Receiver.java | 14 +-
.../apache/log4j/rewrite/MapRewritePolicy.java | 85 -----
.../log4j/rewrite/PropertyRewritePolicy.java | 93 -----
.../log4j/rewrite/ReflectionRewritePolicy.java | 89 -----
.../apache/log4j/rewrite/RewriteAppender.java | 199 -----------
.../org/apache/log4j/rewrite/RewritePolicy.java | 37 --
.../org/apache/log4j/spi/ComponentBase.java | 2 +-
src/main/java/org/apache/log4j/spi/Decoder.java | 12 +-
.../log4j/spi/HierarchyEventListener.java | 36 ++
.../java/org/apache/log4j/spi/Log4JULogger.java | 16 +-
.../apache/log4j/spi/LoggerEventListener.java | 4 +-
.../org/apache/log4j/spi/LoggerFactory.java | 35 ++
.../org/apache/log4j/spi/LoggerRepository.java | 88 +++++
.../apache/log4j/spi/LoggerRepositoryEx.java | 9 +-
.../org/apache/log4j/spi/OptionHandler.java | 62 ++++
.../org/apache/log4j/spi/RendererSupport.java | 33 ++
.../org/apache/log4j/spi/Thresholdable.java | 4 +-
.../apache/log4j/varia/ListModelAppender.java | 21 +-
.../org/apache/log4j/xml/SAXErrorHandler.java | 48 +++
.../apache/log4j/xml/UtilLoggingXMLDecoder.java | 64 ++--
.../java/org/apache/log4j/xml/XMLDecoder.java | 60 ++--
.../log4j/rewrite/RewriteAppenderTest.java | 132 -------
.../resources/org/apache/log4j/rewrite/map.log | 3 -
.../resources/org/apache/log4j/rewrite/map.xml | 38 --
.../org/apache/log4j/rewrite/property.log | 2 -
.../org/apache/log4j/rewrite/property.xml | 40 ---
.../org/apache/log4j/rewrite/reflection.log | 3 -
.../org/apache/log4j/rewrite/reflection.xml | 38 --
64 files changed, 1593 insertions(+), 2538 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e641266..7c2207f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
<groupId>log4j</groupId>
<artifactId>apache-chainsaw</artifactId>
<name>Apache Chainsaw</name>
- <version>2.0.0</version>
+ <version>3.0.0</version>
<description>Graphical Viewer for Logging events from a local or remote log4j event system.</description>
<url>https://logging.apache.org/chainsaw</url>
<inceptionYear>2002</inceptionYear>
@@ -139,8 +139,8 @@
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
- <source>1.6</source>
- <target>1.6</target>
+ <source>1.7</source>
+ <target>1.7</target>
</configuration>
</plugin>
<plugin>
@@ -382,14 +382,19 @@
</build>
<dependencies>
<dependency>
- <groupId>log4j</groupId>
- <artifactId>apache-log4j-extras</artifactId>
- <version>1.1</version>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-api</artifactId>
+ <version>2.9.1</version>
</dependency>
<dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.16</version>
+ <groupId>org.apache.logging.log4j</groupId>
+ <artifactId>log4j-core</artifactId>
+ <version>2.9.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.7</version>
</dependency>
<dependency>
<groupId>javax.jmdns</groupId>
@@ -533,4 +538,3 @@
</profile>
</profiles>
</project>
-
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java b/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
index c2f5aaf..e71435b 100644
--- a/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
+++ b/src/main/java/org/apache/log4j/LoggerRepositoryExImpl.java
@@ -17,10 +17,8 @@
package org.apache.log4j;
-import org.apache.log4j.helpers.LogLog;
import org.apache.log4j.or.ObjectRenderer;
import org.apache.log4j.or.RendererMap;
-import org.apache.log4j.plugins.Plugin;
import org.apache.log4j.plugins.PluginRegistry;
import org.apache.log4j.scheduler.Scheduler;
import org.apache.log4j.spi.ErrorItem;
@@ -31,17 +29,18 @@ import org.apache.log4j.spi.LoggerRepository;
import org.apache.log4j.spi.LoggerRepositoryEventListener;
import org.apache.log4j.spi.LoggerRepositoryEx;
import org.apache.log4j.spi.RendererSupport;
-import org.apache.log4j.xml.UnrecognizedElementHandler;
-import org.apache.log4j.xml.DOMConfigurator;
-import org.w3c.dom.Element;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.status.StatusLogger;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
-import java.util.Properties;
import java.util.Vector;
@@ -52,8 +51,7 @@ import java.util.Vector;
*/
public final class LoggerRepositoryExImpl
implements LoggerRepositoryEx,
- RendererSupport,
- UnrecognizedElementHandler {
+ RendererSupport {
/**
* Wrapped logger repository.
@@ -141,7 +139,7 @@ public final class LoggerRepositoryExImpl
final LoggerRepositoryEventListener listener) {
synchronized (repositoryEventListeners) {
if (repositoryEventListeners.contains(listener)) {
- LogLog.warn(
+ StatusLogger.getLogger().warn(
"Ignoring attempt to add a previously "
+ "registered LoggerRepositoryEventListener.");
} else {
@@ -159,7 +157,7 @@ public final class LoggerRepositoryExImpl
final LoggerRepositoryEventListener listener) {
synchronized (repositoryEventListeners) {
if (!repositoryEventListeners.contains(listener)) {
- LogLog.warn(
+ StatusLogger.getLogger().warn(
"Ignoring attempt to remove a "
+ "non-registered LoggerRepositoryEventListener.");
} else {
@@ -176,7 +174,7 @@ public final class LoggerRepositoryExImpl
public void addLoggerEventListener(final LoggerEventListener listener) {
synchronized (loggerEventListeners) {
if (loggerEventListeners.get(listener) != null) {
- LogLog.warn(
+ StatusLogger.getLogger().warn(
"Ignoring attempt to add a previously registerd LoggerEventListener.");
} else {
HierarchyEventListenerProxy proxy =
@@ -208,7 +206,7 @@ public final class LoggerRepositoryExImpl
HierarchyEventListenerProxy proxy =
(HierarchyEventListenerProxy) loggerEventListeners.get(listener);
if (proxy == null) {
- LogLog.warn(
+ StatusLogger.getLogger().warn(
"Ignoring attempt to remove a non-registered LoggerEventListener.");
} else {
loggerEventListeners.remove(listener);
@@ -221,7 +219,7 @@ public final class LoggerRepositoryExImpl
* Issue warning that there are no appenders in hierarchy.
* @param cat logger, not currently used.
*/
- public void emitNoAppenderWarning(final Category cat) {
+ public void emitNoAppenderWarning(final Locale.Category cat) {
repo.emitNoAppenderWarning(cat);
}
@@ -319,7 +317,7 @@ public final class LoggerRepositoryExImpl
@param logger The logger to which the appender was added.
@param appender The appender added to the logger.
*/
- public void fireAddAppenderEvent(final Category logger,
+ public void fireAddAppenderEvent(final Logger logger,
final Appender appender) {
repo.fireAddAppenderEvent(logger, appender);
}
@@ -331,7 +329,7 @@ public final class LoggerRepositoryExImpl
@param logger The logger from which the appender was removed.
@param appender The appender removed from the logger.
*/
- public void fireRemoveAppenderEvent(final Category logger,
+ public void fireRemoveAppenderEvent(final Logger logger,
final Appender appender) {
if (repo instanceof Hierarchy) {
((Hierarchy) repo).fireRemoveAppenderEvent(logger, appender);
@@ -410,7 +408,7 @@ public final class LoggerRepositoryExImpl
{@link Enumeration}.
@return enumerator of current loggers
*/
- public Enumeration getCurrentLoggers() {
+ public Enumeration<Logger> getCurrentLoggers() {
return repo.getCurrentLoggers();
}
@@ -431,15 +429,6 @@ public final class LoggerRepositoryExImpl
}
/**
- * Get enumerator over current loggers.
- * @return enumerator over current loggers
- @deprecated Please use {@link #getCurrentLoggers} instead.
- */
- public Enumeration getCurrentCategories() {
- return repo.getCurrentCategories();
- }
-
- /**
Get the renderer map for this hierarchy.
@return renderer map
*/
@@ -583,32 +572,6 @@ public final class LoggerRepositoryExImpl
return loggerFactory;
}
- /** {@inheritDoc} */
- public boolean parseUnrecognizedElement(
- final Element element,
- final Properties props) throws Exception {
- if ("plugin".equals(element.getNodeName())) {
- Object instance =
- DOMConfigurator.parseElement(element, props, Plugin.class);
- if (instance instanceof Plugin) {
- Plugin plugin = (Plugin) instance;
- String pluginName = DOMConfigurator.subst(element.getAttribute("name"), props);
- if (pluginName.length() > 0) {
- plugin.setName(pluginName);
- }
- getPluginRegistry().addPlugin(plugin);
- plugin.setLoggerRepository(this);
-
- LogLog.debug("Pushing plugin on to the object stack.");
- plugin.activateOptions();
- return true;
- }
- }
- return false;
- }
-
-
-
/**
* Implementation of RendererSupportImpl if not
* provided by LoggerRepository.
@@ -662,18 +625,18 @@ public final class LoggerRepositoryExImpl
}
/** {@inheritDoc} */
- public void addAppenderEvent(final Category cat,
+ public void addAppenderEvent(final Logger cat,
final Appender appender) {
- if (isEnabled() && cat instanceof Logger) {
- listener.appenderAddedEvent((Logger) cat, appender);
+ if (isEnabled() && cat != null) {
+ listener.appenderAddedEvent(cat, appender);
}
}
/** {@inheritDoc} */
- public void removeAppenderEvent(final Category cat,
+ public void removeAppenderEvent(final Logger cat,
final Appender appender) {
- if (isEnabled() && cat instanceof Logger) {
- listener.appenderRemovedEvent((Logger) cat, appender);
+ if (isEnabled() && cat != null) {
+ listener.appenderRemovedEvent(cat, appender);
}
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
index 9bed427..b193b96 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ChainsawCyclicBufferTableModel.java
@@ -126,10 +126,10 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
Iterator iter = unfilteredCopy.iterator();
while (iter.hasNext()) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
- if (rule.evaluate(loggingEventWrapper.getLoggingEvent(), null)) {
- list.add(loggingEventWrapper);
+ if (rule.evaluate(logEventWrapper.getLogEvent(), null)) {
+ list.add(logEventWrapper);
}
}
@@ -145,27 +145,27 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
previousSize = filteredList.size();
filteredList.clear();
if (ruleMediator == null) {
- LoggingEventWrapper lastEvent = null;
+ LogEventWrapper lastEvent = null;
for (Iterator iter = unfilteredList.iterator();iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
- loggingEventWrapper.setDisplayed(true);
- updateEventMillisDelta(loggingEventWrapper, lastEvent);
- filteredList.add(loggingEventWrapper);
- lastEvent = loggingEventWrapper;
+ LogEventWrapper logEventWrapper = (LogEventWrapper)iter.next();
+ logEventWrapper.setDisplayed(true);
+ updateEventMillisDelta(logEventWrapper, lastEvent);
+ filteredList.add(logEventWrapper);
+ lastEvent = logEventWrapper;
}
} else {
Iterator iter = unfilteredList.iterator();
- LoggingEventWrapper lastEvent = null;
+ LogEventWrapper lastEvent = null;
while (iter.hasNext()) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
- if (ruleMediator.evaluate(loggingEventWrapper.getLoggingEvent(), null)) {
- loggingEventWrapper.setDisplayed(true);
- filteredList.add(loggingEventWrapper);
- updateEventMillisDelta(loggingEventWrapper, lastEvent);
- lastEvent = loggingEventWrapper;
+ if (ruleMediator.evaluate(logEventWrapper.getLogEvent(), null)) {
+ logEventWrapper.setDisplayed(true);
+ filteredList.add(logEventWrapper);
+ updateEventMillisDelta(logEventWrapper, lastEvent);
+ lastEvent = logEventWrapper;
} else {
- loggingEventWrapper.setDisplayed(false);
+ logEventWrapper.setDisplayed(false);
}
}
}
@@ -210,25 +210,25 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
if (searchForward) {
for (int i = startLocation; i < filteredListCopy.size(); i++) {
- if (rule.evaluate(((LoggingEventWrapper) filteredListCopy.get(i)).getLoggingEvent(), null)) {
+ if (rule.evaluate(((LogEventWrapper) filteredListCopy.get(i)).getLogEvent(), null)) {
return i;
}
}
//if there was no match, start at row zero and go to startLocation
for (int i = 0; i < startLocation; i++) {
- if (rule.evaluate(((LoggingEventWrapper) filteredListCopy.get(i)).getLoggingEvent(), null)) {
+ if (rule.evaluate(((LogEventWrapper) filteredListCopy.get(i)).getLogEvent(), null)) {
return i;
}
}
} else {
for (int i = startLocation; i > -1; i--) {
- if (rule.evaluate(((LoggingEventWrapper) filteredListCopy.get(i)).getLoggingEvent(), null)) {
+ if (rule.evaluate(((LogEventWrapper) filteredListCopy.get(i)).getLogEvent(), null)) {
return i;
}
}
//if there was no match, start at row list.size() - 1 and go to startLocation
for (int i = filteredListCopy.size() - 1; i > startLocation; i--) {
- if (rule.evaluate(((LoggingEventWrapper) filteredListCopy.get(i)).getLoggingEvent(), null)) {
+ if (rule.evaluate(((LogEventWrapper) filteredListCopy.get(i)).getLogEvent(), null)) {
return i;
}
}
@@ -332,9 +332,9 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
sort = (sortEnabled && filteredListSize > 0);
if (sort) {
//reset display (used to ensure row height is updated)
- LoggingEventWrapper lastEvent = null;
+ LogEventWrapper lastEvent = null;
for (Iterator iter = filteredList.iterator();iter.hasNext();) {
- LoggingEventWrapper e = (LoggingEventWrapper)iter.next();
+ LogEventWrapper e = (LogEventWrapper)iter.next();
e.setDisplayed(true);
updateEventMillisDelta(e, lastEvent);
lastEvent = e;
@@ -403,9 +403,9 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
}
- public int getRowIndex(LoggingEventWrapper loggingEventWrapper) {
+ public int getRowIndex(LogEventWrapper logEventWrapper) {
synchronized (mutex) {
- return filteredList.indexOf(loggingEventWrapper);
+ return filteredList.indexOf(logEventWrapper);
}
}
@@ -418,16 +418,16 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
unfilteredListCopy = new ArrayList(unfilteredList);
}
for (int i=0;i<filteredListCopy.size();i++) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)filteredListCopy.get(i);
- Object result = loggingEventWrapper.removeProperty(propName);
+ LogEventWrapper logEventWrapper = (LogEventWrapper)filteredListCopy.get(i);
+ Object result = logEventWrapper.removeProperty(propName);
if (result != null) {
fireRowUpdated(i, false);
}
}
//now remove the event from all events
for (Iterator iter = unfilteredListCopy.iterator();iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper)iter.next();
- loggingEventWrapper.removeProperty(propName);
+ LogEventWrapper logEventWrapper = (LogEventWrapper)iter.next();
+ logEventWrapper.removeProperty(propName);
}
}
@@ -438,10 +438,10 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
unfilteredListCopy = new ArrayList(unfilteredList);
}
for (Iterator iter = unfilteredListCopy.iterator();iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
- loggingEventWrapper.evaluateSearchRule(findRule);
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
+ logEventWrapper.evaluateSearchRule(findRule);
//return the count of visible search matches
- if (loggingEventWrapper.isSearchMatch() && loggingEventWrapper.isDisplayed()) {
+ if (logEventWrapper.isSearchMatch() && logEventWrapper.isDisplayed()) {
count++;
}
}
@@ -455,7 +455,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
if (searchForward) {
for (int i = startLocation; i < filteredListCopy.size(); i++) {
- LoggingEventWrapper event = (LoggingEventWrapper)filteredListCopy.get(i);
+ LogEventWrapper event = (LogEventWrapper)filteredListCopy.get(i);
if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
!event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
return i;
@@ -463,7 +463,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
//searching forward, no colorized event was found - now start at row zero and go to startLocation
for (int i = 0; i < startLocation; i++) {
- LoggingEventWrapper event = (LoggingEventWrapper)filteredListCopy.get(i);
+ LogEventWrapper event = (LogEventWrapper)filteredListCopy.get(i);
if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
!event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
return i;
@@ -471,7 +471,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
} else {
for (int i = startLocation; i > -1; i--) {
- LoggingEventWrapper event = (LoggingEventWrapper)filteredListCopy.get(i);
+ LogEventWrapper event = (LogEventWrapper)filteredListCopy.get(i);
if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
!event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
return i;
@@ -479,7 +479,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
//searching backward, no colorized event was found - now start at list.size() - 1 and go to startLocation
for (int i = filteredListCopy.size() - 1; i > startLocation; i--) {
- LoggingEventWrapper event = (LoggingEventWrapper)filteredListCopy.get(i);
+ LogEventWrapper event = (LogEventWrapper)filteredListCopy.get(i);
if (!event.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND) ||
!event.getColorRuleForeground().equals(ChainsawConstants.COLOR_DEFAULT_FOREGROUND)) {
return i;
@@ -494,7 +494,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
int searchMatchCount = 0;
synchronized(mutex) {
for (Iterator iter = filteredList.iterator();iter.hasNext();) {
- LoggingEventWrapper wrapper = (LoggingEventWrapper) iter.next();
+ LogEventWrapper wrapper = (LogEventWrapper) iter.next();
if (wrapper.isSearchMatch() && wrapper.isDisplayed()) {
searchMatchCount++;
}
@@ -511,10 +511,10 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
return (String) columnNames.get(column);
}
- public LoggingEventWrapper getRow(int row) {
+ public LogEventWrapper getRow(int row) {
synchronized (mutex) {
if (row < filteredList.size() && row > -1) {
- return (LoggingEventWrapper) filteredList.get(row);
+ return (LogEventWrapper) filteredList.get(row);
}
}
@@ -532,7 +532,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
synchronized (mutex) {
if (rowIndex < filteredList.size() && rowIndex > -1) {
- event = ((LoggingEventWrapper) filteredList.get(rowIndex)).getLoggingEvent();
+ event = ((LogEventWrapper) filteredList.get(rowIndex)).getLogEvent();
}
}
@@ -619,19 +619,19 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
return "";
}
- public boolean isAddRow(LoggingEventWrapper loggingEventWrapper) {
- Object id = loggingEventWrapper.getLoggingEvent().getProperty(Constants.LOG4J_ID_KEY);
+ public boolean isAddRow(LogEventWrapper logEventWrapper) {
+ Object id = logEventWrapper.getLogEvent().getProperty(Constants.LOG4J_ID_KEY);
//only set the property if it doesn't already exist
if (id == null) {
id = new Integer(++uniqueRow);
- loggingEventWrapper.setProperty(Constants.LOG4J_ID_KEY, id.toString());
+ logEventWrapper.setProperty(Constants.LOG4J_ID_KEY, id.toString());
}
- loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+ logEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(logEventWrapper.getLogEvent()), colorizer.getForegroundColor(logEventWrapper.getLogEvent()));
Rule findRule = colorizer.getFindRule();
if (findRule != null) {
- loggingEventWrapper.evaluateSearchRule(colorizer.getFindRule());
+ logEventWrapper.evaluateSearchRule(colorizer.getFindRule());
}
boolean rowAdded = false;
@@ -650,48 +650,48 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
}
int unfilteredSize = unfilteredList.size();
- LoggingEventWrapper lastLoggingEventWrapper = null;
+ LogEventWrapper lastLogEventWrapper = null;
if (unfilteredSize > 0) {
- lastLoggingEventWrapper = (LoggingEventWrapper) unfilteredList.get(unfilteredSize - 1);
+ lastLogEventWrapper = (LogEventWrapper) unfilteredList.get(unfilteredSize - 1);
}
- unfilteredList.add(loggingEventWrapper);
- if ((ruleMediator == null) || (ruleMediator.evaluate(loggingEventWrapper.getLoggingEvent(), null))) {
- loggingEventWrapper.setDisplayed(true);
- updateEventMillisDelta(loggingEventWrapper, lastLoggingEventWrapper);
- filteredList.add(loggingEventWrapper);
+ unfilteredList.add(logEventWrapper);
+ if ((ruleMediator == null) || (ruleMediator.evaluate(logEventWrapper.getLogEvent(), null))) {
+ logEventWrapper.setDisplayed(true);
+ updateEventMillisDelta(logEventWrapper, lastLogEventWrapper);
+ filteredList.add(logEventWrapper);
rowAdded = true;
} else {
- loggingEventWrapper.setDisplayed(false);
+ logEventWrapper.setDisplayed(false);
}
}
- checkForNewColumn(loggingEventWrapper);
+ checkForNewColumn(logEventWrapper);
return rowAdded;
}
- private void updateEventMillisDelta(LoggingEventWrapper loggingEventWrapper, LoggingEventWrapper lastLoggingEventWrapper) {
- if (lastLoggingEventWrapper != null) {
- loggingEventWrapper.setPreviousDisplayedEventTimestamp(lastLoggingEventWrapper.getLoggingEvent().getTimeStamp());
+ private void updateEventMillisDelta(LogEventWrapper logEventWrapper, LogEventWrapper lastLogEventWrapper) {
+ if (lastLogEventWrapper != null) {
+ logEventWrapper.setPreviousDisplayedEventTimestamp(lastLogEventWrapper.getLogEvent().getTimeStamp());
} else {
//delta to same event = 0
- loggingEventWrapper.setPreviousDisplayedEventTimestamp(loggingEventWrapper.getLoggingEvent().getTimeStamp());
+ logEventWrapper.setPreviousDisplayedEventTimestamp(logEventWrapper.getLogEvent().getTimeStamp());
}
}
- private void checkForNewColumn(LoggingEventWrapper loggingEventWrapper)
+ private void checkForNewColumn(LogEventWrapper logEventWrapper)
{
/**
* Is this a new Property key we haven't seen before? Remember that now MDC has been merged
* into the Properties collection
*/
- boolean newColumn = uniquePropertyKeys.addAll(loggingEventWrapper.getPropertyKeySet());
+ boolean newColumn = uniquePropertyKeys.addAll(logEventWrapper.getPropertyKeySet());
if (newColumn) {
/**
* If so, we should add them as columns and notify listeners.
*/
- for (Iterator iter = loggingEventWrapper.getPropertyKeySet().iterator(); iter.hasNext();) {
+ for (Iterator iter = logEventWrapper.getPropertyKeySet().iterator(); iter.hasNext();) {
String key = iter.next().toString().toUpperCase();
//add all keys except the 'log4jid' key (columnNames is all-caps)
@@ -700,7 +700,7 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
logger.debug("Adding col '" + key + "', columnNames=" + columnNames);
fireNewKeyColumnAdded(
new NewKeyEvent(
- this, columnNames.indexOf(key), key, loggingEventWrapper.getLoggingEvent().getProperty(key)));
+ this, columnNames.indexOf(key), key, logEventWrapper.getLogEvent().getProperty(key)));
}
}
}
@@ -731,19 +731,19 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
}
public void fireRowUpdated(int row, boolean checkForNewColumns) {
- LoggingEventWrapper loggingEventWrapper = getRow(row);
- if (loggingEventWrapper != null)
+ LogEventWrapper logEventWrapper = getRow(row);
+ if (logEventWrapper != null)
{
- loggingEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(loggingEventWrapper.getLoggingEvent()), colorizer.getForegroundColor(loggingEventWrapper.getLoggingEvent()));
+ logEventWrapper.updateColorRuleColors(colorizer.getBackgroundColor(logEventWrapper.getLogEvent()), colorizer.getForegroundColor(logEventWrapper.getLogEvent()));
Rule findRule = colorizer.getFindRule();
if (findRule != null) {
- loggingEventWrapper.evaluateSearchRule(colorizer.getFindRule());
+ logEventWrapper.evaluateSearchRule(colorizer.getFindRule());
}
fireTableRowsUpdated(row, row);
if (checkForNewColumns) {
//row may have had a column added..if so, make sure a column is added
- checkForNewColumn(loggingEventWrapper);
+ checkForNewColumn(logEventWrapper);
}
}
}
@@ -874,8 +874,8 @@ class ChainsawCyclicBufferTableModel extends AbstractTableModel
for (Iterator iter = unfilteredList.iterator();
iter.hasNext();) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
- newUnfilteredList.add(loggingEventWrapper);
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
+ newUnfilteredList.add(logEventWrapper);
monitor.setProgress(index++);
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java b/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
index 158f62b..aff5f73 100644
--- a/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
+++ b/src/main/java/org/apache/log4j/chainsaw/ColumnComparator.java
@@ -43,12 +43,12 @@ public class ColumnComparator implements Comparator {
public int compare(Object o1, Object o2) {
int sort = 1;
- if (o1 instanceof LoggingEventWrapper && o2 instanceof LoggingEventWrapper) {
+ if (o1 instanceof LogEventWrapper && o2 instanceof LogEventWrapper) {
// TODO not everything catered for here yet...
- LoggingEvent e1 = ((LoggingEventWrapper) o1).getLoggingEvent();
- LoggingEvent e2 = ((LoggingEventWrapper) o2).getLoggingEvent();
+ LoggingEvent e1 = ((LogEventWrapper) o1).getLogEvent();
+ LoggingEvent e2 = ((LogEventWrapper) o2).getLogEvent();
switch (index + 1) {
case ChainsawColumns.INDEX_LEVEL_COL_NAME:
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java b/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
index e08d710..d3bf421 100644
--- a/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
+++ b/src/main/java/org/apache/log4j/chainsaw/CopyEventsToClipboardAction.java
@@ -51,7 +51,7 @@ public class CopyEventsToClipboardAction extends AbstractAction {
List filteredEvents = logUi.getCurrentLogPanel().getFilteredEvents();
StringBuffer writer = new StringBuffer(filteredEvents.size() * EVENTSIZE_FUDGE_FACTOR);
for (Iterator iterator = filteredEvents.iterator(); iterator.hasNext();) {
- LoggingEvent event = ((LoggingEventWrapper) iterator.next()).getLoggingEvent();
+ LoggingEvent event = ((LogEventWrapper) iterator.next()).getLogEvent();
writer.append(layout.format(event));
}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
index db7ef82..92c8b02 100644
--- a/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
+++ b/src/main/java/org/apache/log4j/chainsaw/EventContainer.java
@@ -114,14 +114,14 @@ public interface EventContainer extends SortTableModel, LoggerNameModel {
/**
* Returns the vector representing the row.
*/
- LoggingEventWrapper getRow(int row);
+ LogEventWrapper getRow(int row);
/**
* Adds a row to the model.
* @param e event
* @return flag representing whether or not the row is being displayed (not filtered)
*/
- boolean isAddRow(LoggingEventWrapper e);
+ boolean isAddRow(LogEventWrapper e);
/**
* Fire appropriate table update events for the range.
@@ -152,9 +152,9 @@ public interface EventContainer extends SortTableModel, LoggerNameModel {
/**
* Returns the index of the LoggingEventWrapper
- * @param loggingEventWrapper
+ * @param logEventWrapper
*/
- int getRowIndex(LoggingEventWrapper loggingEventWrapper);
+ int getRowIndex(LogEventWrapper logEventWrapper);
/**
* Remove property from all events in container
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java b/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java
index ae278e0..9685c02 100644
--- a/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java
+++ b/src/main/java/org/apache/log4j/chainsaw/FileSaveAction.java
@@ -117,9 +117,9 @@ class FileSaveAction extends AbstractAction {
}
Iterator iter = v.iterator();
while (iter.hasNext()) {
- LoggingEventWrapper loggingEventWrapper = (LoggingEventWrapper) iter.next();
- layout.setLocationInfo(loggingEventWrapper.getLoggingEvent().getThrowableInformation() != null);
- writer.write(layout.format(loggingEventWrapper.getLoggingEvent()));
+ LogEventWrapper logEventWrapper = (LogEventWrapper) iter.next();
+ layout.setLocationInfo(logEventWrapper.getLogEvent().getThrowableInformation() != null);
+ writer.write(layout.format(logEventWrapper.getLogEvent()));
}
} catch (IOException ioe) {
LogLog.warn("Unable to save file", ioe);
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/LogEventWrapper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogEventWrapper.java b/src/main/java/org/apache/log4j/chainsaw/LogEventWrapper.java
new file mode 100644
index 0000000..53e972b
--- /dev/null
+++ b/src/main/java/org/apache/log4j/chainsaw/LogEventWrapper.java
@@ -0,0 +1,189 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.log4j.chainsaw;
+
+import java.awt.Color;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.log4j.helpers.Constants;
+import org.apache.logging.log4j.core.LogEvent;
+
+/**
+ * Wrap access to a LogEvent. All property updates need to go through this object and not through the wrapped logging event,
+ * since the properties are shared by two views of the same backing LogEvent, and logEvent itself creates a copy of passed-in properties..
+ *
+ * Property reads can be made on the actual LogEvent.
+ */
+public class LogEventWrapper {
+ private final LogEvent logEvent;
+ private static final int DEFAULT_HEIGHT = -1;
+
+ private Color colorRuleBackground = ChainsawConstants.COLOR_DEFAULT_BACKGROUND;
+ private Color colorRuleForeground = ChainsawConstants.COLOR_DEFAULT_FOREGROUND;
+ private int markerHeight = DEFAULT_HEIGHT;
+ private int msgHeight = DEFAULT_HEIGHT;
+
+ //set to the log4jid value via setId - assumed to never change
+ private int id;
+
+ private boolean searchMatch = false;
+ //a Map of event fields to Sets of string matches (can be used to render matches differently)
+ Map eventMatches = new HashMap();
+ private LogEventWrapper syncWrapper;
+ private boolean displayed;
+
+ public LogEventWrapper(LogEvent logEvent) {
+ this.logEvent = logEvent;
+ }
+
+ public LogEventWrapper(LogEventWrapper logEventWrapper) {
+ this.logEvent = logEventWrapper.getLogEvent();
+ this.id = logEventWrapper.id;
+ this.syncWrapper = logEventWrapper;
+ logEventWrapper.syncWrapper = this;
+ }
+
+ public LogEvent getLogEvent() {
+ return logEvent;
+ }
+
+ public void setProperty(String propName, String propValue) {
+ logEvent.setProperty(propName, propValue);
+ if (id == 0 && propName.equals(Constants.LOG4J_ID_KEY)) {
+ id = Integer.parseInt(propValue);
+ }
+ if (syncWrapper != null && !propName.equals(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE)) {
+ syncWrapper.getLogEvent().setProperty(propName, propValue);
+ }
+ }
+
+ public Object removeProperty(String propName) {
+ Object result = logEvent.removeProperty(propName);
+ if (syncWrapper != null && !propName.equals(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE)) {
+ syncWrapper.getLogEvent().removeProperty(propName);
+ }
+ return result;
+ }
+
+ public Set getPropertyKeySet() {
+ return logEvent.getPropertyKeySet();
+ }
+
+ public void updateColorRuleColors(Color backgroundColor, Color foregroundColor) {
+ if (backgroundColor != null && foregroundColor != null) {
+ this.colorRuleBackground = backgroundColor;
+ this.colorRuleForeground = foregroundColor;
+ if (syncWrapper != null) {
+ syncWrapper.colorRuleBackground = this.colorRuleBackground;
+ syncWrapper.colorRuleForeground = this.colorRuleForeground;
+ }
+ } else {
+ this.colorRuleBackground = ChainsawConstants.COLOR_DEFAULT_BACKGROUND;
+ this.colorRuleForeground = ChainsawConstants.COLOR_DEFAULT_FOREGROUND;
+ if (syncWrapper != null) {
+ syncWrapper.colorRuleBackground = this.colorRuleBackground;
+ syncWrapper.colorRuleForeground = this.colorRuleForeground;
+ }
+ }
+ }
+
+ public void evaluateSearchRule(Rule searchRule) {
+ eventMatches.clear();
+ searchMatch = searchRule != null && searchRule.evaluate(logEvent, eventMatches);
+ }
+
+ public Map getSearchMatches() {
+ return eventMatches;
+ }
+
+ public Color getForeground() {
+ return colorRuleForeground;
+ }
+
+ public Color getBackground() {
+ return colorRuleBackground;
+ }
+
+ public Color getColorRuleBackground() {
+ return colorRuleBackground;
+ }
+
+ public Color getColorRuleForeground() {
+ return colorRuleForeground;
+ }
+
+ public boolean isSearchMatch() {
+ return searchMatch;
+ }
+
+ public void setMarkerHeight(int markerHeight) {
+ this.markerHeight = markerHeight;
+ }
+
+ public int getMarkerHeight() {
+ return markerHeight;
+ }
+
+ public void setMsgHeight(int msgHeight) {
+ this.msgHeight = msgHeight;
+ }
+
+ public int getMsgHeight() {
+ return msgHeight;
+ }
+
+ public void setDisplayed(boolean b) {
+ markerHeight = DEFAULT_HEIGHT;
+ msgHeight = DEFAULT_HEIGHT;
+ displayed = b;
+ }
+
+ public void setPreviousDisplayedEventTimestamp(long previousDisplayedEventTimeStamp) {
+ setProperty(ChainsawConstants.MILLIS_DELTA_COL_NAME_LOWERCASE, String.valueOf(logEvent.getTimeStamp() - previousDisplayedEventTimeStamp));
+ }
+
+ public boolean isDisplayed() {
+ return displayed;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ LogEventWrapper that = (LogEventWrapper) o;
+
+ if (id != that.id) {
+ return false;
+ }
+
+ return true;
+ }
+
+ public int hashCode() {
+ return id;
+ }
+
+ public String toString() {
+ return "LoggingEventWrapper - id: " + id + " background: " + getBackground() + ", foreground: " + getForeground() + ", msg: " + logEvent.getMessage();
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/deb3b3c0/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
index 0112818..da4eac4 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogFilePatternLayoutBuilder.java
@@ -23,7 +23,6 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -34,27 +33,10 @@ import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.log4j.chainsaw.messages.MessageCenter;
-import org.apache.log4j.helpers.OptionConverter;
-import org.apache.log4j.pattern.ClassNamePatternConverter;
-import org.apache.log4j.pattern.DatePatternConverter;
-import org.apache.log4j.pattern.FileLocationPatternConverter;
-import org.apache.log4j.pattern.FullLocationPatternConverter;
-import org.apache.log4j.pattern.LevelPatternConverter;
-import org.apache.log4j.pattern.LineLocationPatternConverter;
-import org.apache.log4j.pattern.LineSeparatorPatternConverter;
-import org.apache.log4j.pattern.LiteralPatternConverter;
-import org.apache.log4j.pattern.LoggerPatternConverter;
-import org.apache.log4j.pattern.LoggingEventPatternConverter;
-import org.apache.log4j.pattern.MessagePatternConverter;
-import org.apache.log4j.pattern.MethodLocationPatternConverter;
-import org.apache.log4j.pattern.NDCPatternConverter;
-import org.apache.log4j.pattern.PatternParser;
-import org.apache.log4j.pattern.PropertiesPatternConverter;
-import org.apache.log4j.pattern.RelativeTimePatternConverter;
-import org.apache.log4j.pattern.SequenceNumberPatternConverter;
-import org.apache.log4j.pattern.ThreadPatternConverter;
-import org.apache.log4j.xml.Log4jEntityResolver;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.core.pattern.*;
import org.apache.log4j.xml.SAXErrorHandler;
+import org.apache.logging.log4j.core.util.OptionConverter;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -66,11 +48,10 @@ public class LogFilePatternLayoutBuilder
{
public static String getLogFormatFromPatternLayout(String patternLayout) {
String input = OptionConverter.convertSpecialChars(patternLayout);
- List converters = new ArrayList();
- List fields = new ArrayList();
- Map converterRegistry = null;
+ List<PatternConverter> converters = new ArrayList<>();
+ List<FormattingInfo> fields = new ArrayList<>();
- PatternParser.parse(input, converters, fields, converterRegistry, PatternParser.getPatternLayoutRules());
+ new PatternParser(PatternLayout.KEY).parse(input, converters, fields, false, false);
return getFormatFromConverters(converters);
}
@@ -100,12 +81,11 @@ public class LogFilePatternLayoutBuilder
return timestampFormat;
}
- private static String getFormatFromConverters(List converters) {
- StringBuffer buffer = new StringBuffer();
- for (Iterator iter = converters.iterator();iter.hasNext();) {
- LoggingEventPatternConverter converter = (LoggingEventPatternConverter)iter.next();
+ private static String getFormatFromConverters(List<PatternConverter> converters) {
+ StringBuilder buffer = new StringBuilder();
+ for (PatternConverter converter : converters) {
if (converter instanceof DatePatternConverter) {
- buffer.append("TIMESTAMP");
+ buffer.append("TIMESTAMP");
} else if (converter instanceof MessagePatternConverter) {
buffer.append("MESSAGE");
} else if (converter instanceof LoggerPatternConverter) {
@@ -114,14 +94,14 @@ public class LogFilePatternLayoutBuilder
buffer.append("CLASS");
} else if (converter instanceof RelativeTimePatternConverter) {
buffer.append("PROP(RELATIVETIME)");
- } else if (converter instanceof ThreadPatternConverter) {
+ } else if (converter instanceof ThreadNamePatternConverter) {
buffer.append("THREAD");
- } else if (converter instanceof NDCPatternConverter) {
+ } else if (converter instanceof NdcPatternConverter) {
buffer.append("NDC");
} else if (converter instanceof LiteralPatternConverter) {
LiteralPatternConverter literal = (LiteralPatternConverter)converter;
//format shouldn't normally take a null, but we're getting a literal, so passing in the buffer will work
- literal.format(null, buffer);
+ literal.format(buffer);
} else if (converter instanceof SequenceNumberPatternConverter) {
buffer.append("PROP(log4jid)");
} else if (converter instanceof LevelPatternConverter) {
@@ -134,13 +114,13 @@ public class LogFilePatternLayoutBuilder
buffer.append("LINE");
} else if (converter instanceof FileLocationPatternConverter) {
buffer.append("FILE");
- } else if (converter instanceof PropertiesPatternConverter) {
+ } else if (converter instanceof MdcPatternConverter) {
// PropertiesPatternConverter propertiesConverter = (PropertiesPatternConverter) converter;
// String option = propertiesConverter.getOption();
// if (option != null && option.length() > 0) {
// buffer.append("PROP(" + option + ")");
// } else {
- buffer.append("PROP(PROPERTIES)");
+ buffer.append("PROP(PROPERTIES)");
// }
} else if (converter instanceof LineSeparatorPatternConverter) {
//done
@@ -152,11 +132,7 @@ public class LogFilePatternLayoutBuilder
public static Map getAppenderConfiguration(File file) {
try {
return getXMLFileAppenderConfiguration(file);
- } catch (IOException e) {
- //ignore
- } catch (ParserConfigurationException e) {
- //ignore
- } catch (SAXException e) {
+ } catch (IOException | ParserConfigurationException | SAXException e) {
//ignore
}
try {
@@ -169,7 +145,7 @@ public class LogFilePatternLayoutBuilder
}
public static Map getPropertiesFileAppenderConfiguration(File propertyFile) throws IOException, ParserConfigurationException, SAXException {
- Map result = new HashMap();
+ Map<String, Map<String, String>> result = new HashMap<>();
String appenderPrefix = "log4j.appender";
Properties props = new Properties();
FileInputStream inputStream = null;
@@ -177,7 +153,7 @@ public class LogFilePatternLayoutBuilder
inputStream = new FileInputStream(propertyFile);
props.load(inputStream);
Enumeration propertyNames = props.propertyNames();
- Map appenders = new HashMap();
+ Map<String, String> appenders = new HashMap<>();
while (propertyNames.hasMoreElements()) {
String propertyName = propertyNames.nextElement().toString();
if (propertyName.startsWith(appenderPrefix)) {
@@ -188,24 +164,23 @@ public class LogFilePatternLayoutBuilder
}
}
}
- for (Iterator iter = appenders.entrySet().iterator();iter.hasNext();) {
- Map.Entry appenderEntry = (Map.Entry)iter.next();
- String appenderName = appenderEntry.getKey().toString();
- String appenderClassName = appenderEntry.getValue().toString();
- if (appenderClassName.toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
- String layout = props.getProperty(appenderPrefix + "." + appenderName + ".layout");
- if (layout != null && layout.trim().equals("org.apache.log4j.PatternLayout")) {
- String conversion = props.getProperty(appenderPrefix + "." + appenderName + ".layout.ConversionPattern");
- String file = props.getProperty(appenderPrefix + "." + appenderName + ".File");
- if (conversion != null && file != null) {
- Map entry = new HashMap();
- entry.put("file", file.trim());
- entry.put("conversion", conversion.trim());
- result.put(appenderName, entry);
+ for (Map.Entry<String, String> appenderEntry : appenders.entrySet()) {
+ String appenderName = appenderEntry.getKey();
+ String appenderClassName = appenderEntry.getValue();
+ if (appenderClassName.toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
+ String layout = props.getProperty(appenderPrefix + "." + appenderName + ".layout");
+ if (layout != null && layout.trim().equals("org.apache.log4j.PatternLayout")) {
+ String conversion = props.getProperty(appenderPrefix + "." + appenderName + ".layout.ConversionPattern");
+ String file = props.getProperty(appenderPrefix + "." + appenderName + ".File");
+ if (conversion != null && file != null) {
+ Map<String, String> entry = new HashMap<>();
+ entry.put("file", file.trim());
+ entry.put("conversion", conversion.trim());
+ result.put(appenderName, entry);
+ }
+ }
}
- }
}
- }
/*
example:
log4j.appender.R=org.apache.log4j.RollingFileAppender
@@ -228,69 +203,65 @@ public class LogFilePatternLayoutBuilder
}
private static Map getXMLFileAppenderConfiguration(File file) throws IOException, ParserConfigurationException, SAXException {
- InputStream stream = file.toURI().toURL().openStream();
- Map result = new HashMap();
- try {
- InputSource src = new InputSource(stream);
- src.setSystemId(file.toURI().toURL().toString());
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- DocumentBuilder docBuilder = dbf.newDocumentBuilder();
+ Map<String, Map<String, String>> result = new HashMap<>();
+ try (InputStream stream = file.toURI().toURL().openStream()) {
+ InputSource src = new InputSource(stream);
+ src.setSystemId(file.toURI().toURL().toString());
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder docBuilder = dbf.newDocumentBuilder();
- docBuilder.setErrorHandler(new SAXErrorHandler());
- docBuilder.setEntityResolver(new Log4jEntityResolver());
- Document doc = docBuilder.parse(src);
- NodeList appenders = doc.getElementsByTagName("appender");
- for (int i = 0; i < appenders.getLength(); i++) {
- Node appender = appenders.item(i);
- NamedNodeMap appenderAttributes = appender.getAttributes();
+ docBuilder.setErrorHandler(new SAXErrorHandler());
+ Document doc = docBuilder.parse(src);
+ NodeList appenders = doc.getElementsByTagName("appender");
+ for (int i = 0; i < appenders.getLength(); i++) {
+ Node appender = appenders.item(i);
+ NamedNodeMap appenderAttributes = appender.getAttributes();
// Class appenderClass = Class.forName(map.getNamedItem("class").getNodeValue());
- Node appenderClass = appenderAttributes.getNamedItem("class");
- if (appenderAttributes.getNamedItem("name") != null && appenderClass != null && appenderClass.getNodeValue() != null) {
- //all log4j fileappenders end in fileappender..if a custom fileappender also ends in fileappender and uses the same dom nodes to be loaded,
- //try to parse the nodes as well
- if (appenderClass.getNodeValue().toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
- String appenderName = appenderAttributes.getNamedItem("name").getNodeValue();
- //subclass of FileAppender - add it
- Map entry = new HashMap();
- NodeList appenderChildren = appender.getChildNodes();
- for (int j = 0; j < appenderChildren.getLength(); j++) {
- Node appenderChild = appenderChildren.item(j);
- if (appenderChild.getNodeName().equals("param") && appenderChild.hasAttributes()) {
- Node fileNameNode = appenderChild.getAttributes().getNamedItem("name");
- if (fileNameNode != null && fileNameNode.getNodeValue().equalsIgnoreCase("file")) {
- Node fileValueNode = appenderChild.getAttributes().getNamedItem("value");
- if (fileValueNode != null) {
- entry.put("file", fileValueNode.getNodeValue());
- }
- }
- }
- if (appenderChild.getNodeName().equalsIgnoreCase("layout") && appenderChild.hasAttributes()) {
- NamedNodeMap layoutAttributes = appenderChild.getAttributes();
- Node layoutNode = layoutAttributes.getNamedItem("class");
- if (layoutNode != null && layoutNode.getNodeValue() != null && layoutNode.getNodeValue().equalsIgnoreCase("org.apache.log4j.PatternLayout")) {
- NodeList layoutChildren = appenderChild.getChildNodes();
- for (int k = 0; k < layoutChildren.getLength(); k++) {
- Node layoutChild = layoutChildren.item(k);
- if (layoutChild.getNodeName().equals("param") && layoutChild.hasAttributes()) {
- Node layoutName = layoutChild.getAttributes().getNamedItem("name");
- if (layoutName != null && layoutName.getNodeValue() != null && layoutName.getNodeValue().equalsIgnoreCase("conversionpattern")) {
- Node conversionValue = layoutChild.getAttributes().getNamedItem("value");
- if (conversionValue != null) {
- entry.put("conversion", conversionValue.getNodeValue());
- }
+ Node appenderClass = appenderAttributes.getNamedItem("class");
+ if (appenderAttributes.getNamedItem("name") != null && appenderClass != null && appenderClass.getNodeValue() != null) {
+ //all log4j fileappenders end in fileappender..if a custom fileappender also ends in fileappender and uses the same dom nodes to be loaded,
+ //try to parse the nodes as well
+ if (appenderClass.getNodeValue().toLowerCase(Locale.ENGLISH).endsWith("fileappender")) {
+ String appenderName = appenderAttributes.getNamedItem("name").getNodeValue();
+ //subclass of FileAppender - add it
+ Map<String, String> entry = new HashMap<>();
+ NodeList appenderChildren = appender.getChildNodes();
+ for (int j = 0; j < appenderChildren.getLength(); j++) {
+ Node appenderChild = appenderChildren.item(j);
+ if (appenderChild.getNodeName().equals("param") && appenderChild.hasAttributes()) {
+ Node fileNameNode = appenderChild.getAttributes().getNamedItem("name");
+ if (fileNameNode != null && fileNameNode.getNodeValue().equalsIgnoreCase("file")) {
+ Node fileValueNode = appenderChild.getAttributes().getNamedItem("value");
+ if (fileValueNode != null) {
+ entry.put("file", fileValueNode.getNodeValue());
+ }
+ }
+ }
+ if (appenderChild.getNodeName().equalsIgnoreCase("layout") && appenderChild.hasAttributes()) {
+ NamedNodeMap layoutAttributes = appenderChild.getAttributes();
+ Node layoutNode = layoutAttributes.getNamedItem("class");
+ if (layoutNode != null && layoutNode.getNodeValue() != null && layoutNode.getNodeValue().equalsIgnoreCase("org.apache.log4j.PatternLayout")) {
+ NodeList layoutChildren = appenderChild.getChildNodes();
+ for (int k = 0; k < layoutChildren.getLength(); k++) {
+ Node layoutChild = layoutChildren.item(k);
+ if (layoutChild.getNodeName().equals("param") && layoutChild.hasAttributes()) {
+ Node layoutName = layoutChild.getAttributes().getNamedItem("name");
+ if (layoutName != null && layoutName.getNodeValue() != null && layoutName.getNodeValue().equalsIgnoreCase("conversionpattern")) {
+ Node conversionValue = layoutChild.getAttributes().getNamedItem("value");
+ if (conversionValue != null) {
+ entry.put("conversion", conversionValue.getNodeValue());
+ }
+ }
+ }
+ }
+ }
+ }
}
- }
+ result.put(appenderName, entry);
}
- }
}
- }
- result.put(appenderName, entry);
}
- }
}
- } finally {
- stream.close();
- }
MessageCenter.getInstance().getLogger().info("getXMLFileAppenderConfiguration for file: " + file + ", result: " + result);
return result;
}