You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2012/10/29 00:24:41 UTC
svn commit: r1403125 - in /logging/log4j/log4j2/trunk:
core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
src/changes/changes.xml
Author: rgoers
Date: Sun Oct 28 23:24:41 2012
New Revision: 1403125
URL: http://svn.apache.org/viewvc?rev=1403125&view=rev
Log:
Fix LOG4J2-103 - The LogEvent was wrapping a ThrowableProxy with another ThrowableProxy when deserializing.
Added:
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java?rev=1403125&r1=1403124&r2=1403125&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java Sun Oct 28 23:24:41 2012
@@ -103,7 +103,7 @@ public class Log4jLogEvent implements Lo
this.fqcnOfLogger = fqcn;
this.level = level;
this.message = message;
- this.throwable = t == null ? null : new ThrowableProxy(t);
+ this.throwable = (t == null ? null : (t instanceof ThrowableProxy ? (ThrowableProxy)t : new ThrowableProxy(t)));
this.mdc = mdc;
this.ndc = ndc;
this.timestamp = message instanceof TimestampMessage ? ((TimestampMessage) message).getTimestamp() : timestamp;
Added: logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java?rev=1403125&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java (added)
+++ logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java Sun Oct 28 23:24:41 2012
@@ -0,0 +1,134 @@
+package org.apache.logging.log4j.core.appender.rewrite;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.MarkerManager;
+import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.rewrite.MapRewritePolicy;
+import org.apache.logging.log4j.core.helpers.KeyValuePair;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
+import org.apache.logging.log4j.message.MapMessage;
+import org.apache.logging.log4j.message.SimpleMessage;
+import org.apache.logging.log4j.message.StructuredDataMessage;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+
+public class MapRewritePolicyTest {
+ private static Map<String, String> map = new HashMap<String, String>();
+ private static KeyValuePair[] rewrite;
+ private static LogEvent logEvent0, logEvent1, logEvent2, logEvent3;
+
+ @BeforeClass
+ public static void setupClass() {
+ map.put("test1", "one");
+ map.put("test2", "two");
+ logEvent0 = new Log4jLogEvent("test", null, "MapRewritePolicyTest.setupClass()", Level.ERROR,
+ new SimpleMessage("Test"), new RuntimeException("test"), map, null, "none",
+ new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 28), 2);
+ logEvent1 = new Log4jLogEvent("test", null, "MapRewritePolicyTest.setupClass()", Level.ERROR,
+ new MapMessage(map), null, map, null, "none",
+ new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 29), 2);
+ logEvent2 = new Log4jLogEvent("test", MarkerManager.getMarker("test"), "MapRewritePolicyTest.setupClass()",
+ Level.TRACE, new StructuredDataMessage("test", "Nothing", "test", map), new RuntimeException("test"), null,
+ new ThreadContext.ImmutableStack(map.values()), "none", new StackTraceElement("MapRewritePolicyTest",
+ "setupClass", "MapRewritePolicyTest", 30), 20000000);
+ logEvent3 = new Log4jLogEvent("test", null, "MapRewritePolicyTest.setupClass()", Level.ALL, new MapMessage(map),
+ null, map, new ThreadContext.ImmutableStack(map.values()), null, new StackTraceElement("MapRewritePolicyTest",
+ "setupClass", "MapRewritePolicyTest", 31), Long.MAX_VALUE);
+ rewrite = new KeyValuePair[] {new KeyValuePair("test2", "2"), new KeyValuePair("test3", "three")};
+ }
+
+ @Test
+ public void addTest() {
+ MapRewritePolicy addPolicy = MapRewritePolicy.createPolicy("Add", rewrite);
+ LogEvent rewritten = addPolicy.rewrite(logEvent0);
+ compareLogEvents(logEvent0, rewritten);
+ Assert.assertEquals("Simple log message changed", logEvent0.getMessage(), rewritten.getMessage());
+
+ rewritten = addPolicy.rewrite(logEvent1);
+ compareLogEvents(logEvent1, rewritten);
+ checkAdded(((MapMessage)rewritten.getMessage()).getData());
+
+ rewritten = addPolicy.rewrite(logEvent2);
+ compareLogEvents(logEvent2, rewritten);
+ checkAdded(((MapMessage)rewritten.getMessage()).getData());
+
+ rewritten = addPolicy.rewrite(logEvent3);
+ compareLogEvents(logEvent3, rewritten);
+ checkAdded(((MapMessage)rewritten.getMessage()).getData());
+ }
+
+ @Test
+ public void updateTest() {
+ MapRewritePolicy updatePolicy = MapRewritePolicy.createPolicy("Update", rewrite);
+ LogEvent rewritten = updatePolicy.rewrite(logEvent0);
+ compareLogEvents(logEvent0, rewritten);
+ Assert.assertEquals("Simple log message changed", logEvent0.getMessage(), rewritten.getMessage());
+
+ rewritten = updatePolicy.rewrite(logEvent1);
+ compareLogEvents(logEvent1, rewritten);
+ checkUpdated(((MapMessage)rewritten.getMessage()).getData());
+
+ rewritten = updatePolicy.rewrite(logEvent2);
+ compareLogEvents(logEvent2, rewritten);
+ checkUpdated(((MapMessage)rewritten.getMessage()).getData());
+
+ rewritten = updatePolicy.rewrite(logEvent3);
+ compareLogEvents(logEvent3, rewritten);
+ checkUpdated(((MapMessage)rewritten.getMessage()).getData());
+ }
+
+ @Test
+ public void defaultIsAdd() {
+ MapRewritePolicy addPolicy = MapRewritePolicy.createPolicy(null, rewrite);
+ LogEvent rewritten = addPolicy.rewrite(logEvent0);
+ compareLogEvents(logEvent0, rewritten);
+ Assert.assertEquals("Simple log message changed", logEvent0.getMessage(), rewritten.getMessage());
+
+ rewritten = addPolicy.rewrite(logEvent1);
+ compareLogEvents(logEvent1, rewritten);
+ checkAdded(((MapMessage)rewritten.getMessage()).getData());
+
+ rewritten = addPolicy.rewrite(logEvent2);
+ compareLogEvents(logEvent2, rewritten);
+ checkAdded(((MapMessage)rewritten.getMessage()).getData());
+
+ rewritten = addPolicy.rewrite(logEvent3);
+ compareLogEvents(logEvent3, rewritten);
+ checkAdded(((MapMessage)rewritten.getMessage()).getData());
+ }
+
+ private void checkAdded(Map<String, String> addedMap) {
+ Assert.assertEquals("unwanted entry change", "one", addedMap.get("test1"));
+ Assert.assertEquals("existing entry not updated", "2", addedMap.get("test2"));
+ Assert.assertEquals("new entry not added", "three", addedMap.get("test3"));
+ Assert.assertEquals("wrong size", 3, addedMap.size());
+ }
+
+ private void checkUpdated(Map<String, String> updatedMap) {
+ Assert.assertEquals("unwanted entry change", "one", updatedMap.get("test1"));
+ Assert.assertEquals("existing entry not updated", "2", updatedMap.get("test2"));
+ Assert.assertEquals("wrong size", 2, updatedMap.size());
+ }
+
+ private void compareLogEvents(LogEvent orig, LogEvent changed) {
+ // Ensure that everything but the Mapped Data is still the same
+ Assert.assertEquals("LoggerName changed", orig.getLoggerName(), changed.getLoggerName());
+ Assert.assertEquals("Marker changed", orig.getMarker(), changed.getMarker());
+ Assert.assertEquals("FQCN changed", orig.getFQCN(), changed.getFQCN());
+ Assert.assertEquals("Level changed", orig.getLevel(), changed.getLevel());
+ Assert.assertEquals("Thrown changed", (orig.getThrown() == null ? null : ((ThrowableProxy)orig.getThrown()).getExtendedStackTrace()),
+ (changed.getThrown() == null ? null : ((ThrowableProxy)changed.getThrown()).getExtendedStackTrace()));
+ Assert.assertEquals("ContextMap changed", orig.getContextMap(), changed.getContextMap());
+ Assert.assertEquals("ContextStack changed", orig.getContextStack(), changed.getContextStack());
+ Assert.assertEquals("ThreadName changed", orig.getThreadName(), changed.getThreadName());
+ Assert.assertEquals("Source changed", orig.getSource(), changed.getSource());
+ Assert.assertEquals("Millis changed", orig.getMillis(), changed.getMillis());
+ }
+}
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1403125&r1=1403124&r2=1403125&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Sun Oct 28 23:24:41 2012
@@ -23,6 +23,9 @@
<body>
<release version="2.0-beta3" date="TBD" description= "Bug fixes and enhancements">
+ <action issue="LOG4J2-103" dev="rgoers" type="fix" due-to="Das Archive">
+ The LogEvent was wrapping a ThrowableProxy with another ThrowableProxy when deserializing.
+ </action>
<action dev="rgoers" type="update">
Created combined jar to combine API and Core contents for users who only want the Log4j implementation.
</action>