Author: ggregory
Date: Fri May  9 19:00:23 2014
New Revision: 1593597

URL: http://svn.apache.org/r1593597
Log:
In order to properly deal with exceptions on the application listening side of 
Log4j events from a JSON or XML source (another app in another JVM), we do not 
get a Throwable because the exception class may not exist in the receiving 
class loader. Instead, we use a ThrowableProxy to track as much information as 
we think will be of interest. HOWEVER, this is not available to users of the 
LogEvent interface. We need to make it available for other appenders which can 
then log the information in the proxy. The upcoming JSON and XML listeners and 
appender will make use of this.

Added:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java
   (with props)
Modified:
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LogEvent.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java
    
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
    
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
    
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/DateLookupTest.java
    
logging/log4j/log4j2/trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java

Added: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java?rev=1593597&view=auto
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java
 (added)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java
 Fri May  9 19:00:23 2014
@@ -0,0 +1,98 @@
+package org.apache.logging.log4j.core;
+
+import java.util.Map;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.ThreadContext.ContextStack;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
+import org.apache.logging.log4j.message.Message;
+
+/**
+ * An abstract log event implementation with default values for all methods. 
The setters are no-ops.
+ */
+public abstract class AbstractLogEvent implements LogEvent {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public Map<String, String> getContextMap() {
+        return null;
+    }
+
+    @Override
+    public ContextStack getContextStack() {
+        return null;
+    }
+
+    @Override
+    public String getLoggerFQCN() {
+        return null;
+    }
+
+    @Override
+    public Level getLevel() {
+        return null;
+    }
+
+    @Override
+    public String getLoggerName() {
+        return null;
+    }
+
+    @Override
+    public Marker getMarker() {
+        return null;
+    }
+
+    @Override
+    public Message getMessage() {
+        return null;
+    }
+
+    @Override
+    public long getTimeMillis() {
+        return 0;
+    }
+
+    @Override
+    public StackTraceElement getSource() {
+        return null;
+    }
+
+    @Override
+    public String getThreadName() {
+        return null;
+    }
+
+    @Override
+    public Throwable getThrown() {
+        return null;
+    }
+
+    @Override
+    public ThrowableProxy getThrownProxy() {
+        return null;
+    }
+
+    @Override
+    public boolean isEndOfBatch() {
+        return false;
+    }
+
+    @Override
+    public boolean isIncludeLocation() {
+        return false;
+    }
+
+    @Override
+    public void setEndOfBatch(boolean endOfBatch) {
+        // do nothing
+    }
+
+    @Override
+    public void setIncludeLocation(boolean locationRequired) {
+        // do nothing
+    }
+
+}

Propchange: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/AbstractLogEvent.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LogEvent.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LogEvent.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LogEvent.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/LogEvent.java
 Fri May  9 19:00:23 2014
@@ -23,6 +23,7 @@ import java.util.Map;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
 
 /**
@@ -104,12 +105,21 @@ public interface LogEvent extends Serial
 
     /**
      * Gets throwable associated with logging request.
+     * <p>
+     * Convenience method for {@code ThrowableProxy.getThrowable();}
      * 
      * @return throwable, may be null.
      */
     Throwable getThrown();
 
     /**
+     * Gets throwable proxy associated with logging request.
+     * 
+     * @return throwable, may be null.
+     */
+    ThrowableProxy getThrownProxy();
+
+    /**
      * Returns {@code true} if this event is the last one in a batch, {@code 
false} otherwise. Used by asynchronous
      * Loggers and Appenders to signal to buffered downstream components when 
to flush to disk, as a more efficient
      * alternative to the {@code immediateFlush=true} configuration.

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/AbstractLogEventWrapperEntity.java
 Fri May  9 19:00:23 2014
@@ -26,7 +26,9 @@ import javax.persistence.Transient;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.AbstractLogEvent;
 import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
 
 /**
@@ -253,82 +255,7 @@ public abstract class AbstractLogEventWr
      * A no-op log event class to prevent {@code NullPointerException}s. O/RMs 
tend to create instances of entities in
      * order to "play around" with them.
      */
-    private static class NullLogEvent implements LogEvent {
-        private static final long serialVersionUID = 1L;
-
-        @Override
-        public Level getLevel() {
-            return null;
-        }
-
-        @Override
-        public String getLoggerName() {
-            return null;
-        }
-
-        @Override
-        public StackTraceElement getSource() {
-            return null;
-        }
-
-        @Override
-        public Message getMessage() {
-            return null;
-        }
-
-        @Override
-        public Marker getMarker() {
-            return null;
-        }
-
-        @Override
-        public String getThreadName() {
-            return null;
-        }
-
-        @Override
-        public long getTimeMillis() {
-            return 0;
-        }
-
-        @Override
-        public Throwable getThrown() {
-            return null;
-        }
-
-        @Override
-        public Map<String, String> getContextMap() {
-            return null;
-        }
-
-        @Override
-        public ThreadContext.ContextStack getContextStack() {
-            return null;
-        }
-
-        @Override
-        public String getLoggerFQCN() {
-            return null;
-        }
-
-        @Override
-        public boolean isIncludeLocation() {
-            return false;
-        }
-
-        @Override
-        public void setIncludeLocation(final boolean locationRequired) {
-
-        }
-
-        @Override
-        public boolean isEndOfBatch() {
-            return false;
-        }
-
-        @Override
-        public void setEndOfBatch(final boolean endOfBatch) {
-
-        }
+    private static class NullLogEvent extends AbstractLogEvent {
+       // Inherits everything
     }
 }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/jpa/BasicLogEventEntity.java
 Fri May  9 19:00:23 2014
@@ -17,9 +17,11 @@
 package org.apache.logging.log4j.core.appender.db.jpa;
 
 import java.util.Map;
+
 import javax.persistence.Basic;
 import javax.persistence.Convert;
 import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
@@ -32,6 +34,7 @@ import org.apache.logging.log4j.core.app
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.MessageAttributeConverter;
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.StackTraceElementAttributeConverter;
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.ThrowableAttributeConverter;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
 
 /**
@@ -179,6 +182,18 @@ public abstract class BasicLogEventEntit
     }
 
     /**
+     * Gets the exception logged. Annotated with {@code @Convert(converter = 
ThrowableAttributeConverter.class)}.
+     *
+     * @return the exception logged.
+     * @see ThrowableAttributeConverter
+     */
+    @Override
+    @Transient
+    public ThrowableProxy getThrownProxy() {
+        return this.getWrappedEvent().getThrownProxy();
+    }
+
+    /**
      * Gets the context map. Annotated with {@code @Convert(converter = 
ContextMapAttributeConverter.class)}.
      *
      * @return the context map.

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
 Fri May  9 19:00:23 2014
@@ -24,6 +24,7 @@ import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext.ContextStack;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.Property;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.core.lookup.StrSubstitutor;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
@@ -36,208 +37,217 @@ import com.lmax.disruptor.EventFactory;
  * objects. These objects are then re-used during the life of the RingBuffer.
  */
 public class RingBufferLogEvent implements LogEvent {
-    private static final long serialVersionUID = 8462119088943934758L;
+       private static final long serialVersionUID = 8462119088943934758L;
 
-    /**
-     * Creates the events that will be put in the RingBuffer.
-     */
-    private static class Factory implements EventFactory<RingBufferLogEvent> {
-    
-        @Override
-        public RingBufferLogEvent newInstance() {
-            return new RingBufferLogEvent();
-        }
-    }
-
-    /** The {@code EventFactory} for {@code RingBufferLogEvent}s. */
-    public static final Factory FACTORY = new Factory();
-
-    private AsyncLogger asyncLogger;
-    private String loggerName;
-    private Marker marker;
-    private String fqcn;
-    private Level level;
-    private Message message;
-    private Throwable thrown;
-    private Map<String, String> contextMap;
-    private ContextStack contextStack;
-    private String threadName;
-    private StackTraceElement location;
-    private long currentTimeMillis;
-    private boolean endOfBatch;
-    private boolean includeLocation;
-
-    public void setValues(final AsyncLogger asyncLogger,
-            final String loggerName, final Marker marker, final String fqcn,
-            final Level level, final Message data, final Throwable t,
-            final Map<String, String> map, final ContextStack contextStack,
-            final String threadName, final StackTraceElement location,
-            final long currentTimeMillis) {
-        this.asyncLogger = asyncLogger;
-        this.loggerName = loggerName;
-        this.marker = marker;
-        this.fqcn = fqcn;
-        this.level = level;
-        this.message = data;
-        this.thrown = t;
-        this.contextMap = map;
-        this.contextStack = contextStack;
-        this.threadName = threadName;
-        this.location = location;
-        this.currentTimeMillis = currentTimeMillis;
-    }
-
-    /**
-     * Event processor that reads the event from the ringbuffer can call this
-     * method.
-     *
-     * @param endOfBatch flag to indicate if this is the last event in a batch
-     *            from the RingBuffer
-     */
-    public void execute(final boolean endOfBatch) {
-        this.endOfBatch = endOfBatch;
-        asyncLogger.actualAsyncLog(this);
-    }
-
-    /**
-     * Returns {@code true} if this event is the end of a batch, {@code false}
-     * otherwise.
-     *
-     * @return {@code true} if this event is the end of a batch, {@code false}
-     *         otherwise
-     */
-    @Override
-    public boolean isEndOfBatch() {
-        return endOfBatch;
-    }
-
-    @Override
-    public void setEndOfBatch(final boolean endOfBatch) {
-        this.endOfBatch = endOfBatch;
-    }
-
-    @Override
-    public boolean isIncludeLocation() {
-        return includeLocation;
-    }
-
-    @Override
-    public void setIncludeLocation(final boolean includeLocation) {
-        this.includeLocation = includeLocation;
-    }
-
-    @Override
-    public String getLoggerName() {
-        return loggerName;
-    }
-
-    @Override
-    public Marker getMarker() {
-        return marker;
-    }
-
-    @Override
-    public String getLoggerFQCN() {
-        return fqcn;
-    }
-
-    @Override
-    public Level getLevel() {
-        if (level == null) {
-            level = Level.OFF; // LOG4J2-462, LOG4J2-465
-        }
-        return level;
-    }
-
-    @Override
-    public Message getMessage() {
-        if (message == null) {
-            message = new SimpleMessage("");
-        }
-        return message;
-    }
-
-    @Override
-    public Throwable getThrown() {
-        return thrown;
-    }
-
-    @Override
-    public Map<String, String> getContextMap() {
-        return contextMap;
-    }
-
-    @Override
-    public ContextStack getContextStack() {
-        return contextStack;
-    }
-
-    @Override
-    public String getThreadName() {
-        return threadName;
-    }
-
-    @Override
-    public StackTraceElement getSource() {
-        return location;
-    }
-
-    @Override
-    public long getTimeMillis() {
-        Message msg = getMessage();
-        if (msg instanceof TimestampMessage) { // LOG4J2-455
-            return ((TimestampMessage) msg).getTimestamp();
-        }
-        return currentTimeMillis;
-    }
-
-    /**
-     * Merges the contents of the specified map into the contextMap, after
-     * replacing any variables in the property values with the
-     * StrSubstitutor-supplied actual values.
-     *
-     * @param properties configured properties
-     * @param strSubstitutor used to lookup values of variables in properties
-     */
-    public void mergePropertiesIntoContextMap(
-            final Map<Property, Boolean> properties,
-            final StrSubstitutor strSubstitutor) {
-        if (properties == null) {
-            return; // nothing to do
-        }
-
-        final Map<String, String> map = (contextMap == null) ? new 
HashMap<String, String>()
-                : new HashMap<String, String>(contextMap);
-
-        for (final Map.Entry<Property, Boolean> entry : properties.entrySet()) 
{
-            final Property prop = entry.getKey();
-            if (map.containsKey(prop.getName())) {
-                continue; // contextMap overrides config properties
-            }
-            final String value = entry.getValue() ? strSubstitutor.replace(prop
-                    .getValue()) : prop.getValue();
-            map.put(prop.getName(), value);
-        }
-        contextMap = map;
-    }
-
-    /**
-     * Release references held by ring buffer to allow objects to be
-     * garbage-collected.
-     */
-    public void clear() {
-        setValues(null, // asyncLogger
-                null, // loggerName
-                null, // marker
-                null, // fqcn
-                null, // level
-                null, // data
-                null, // t
-                null, // map
-                null, // contextStack
-                null, // threadName
-                null, // location
-                0 // currentTimeMillis
-        );
-    }
+       /**
+        * Creates the events that will be put in the RingBuffer.
+        */
+       private static class Factory implements 
EventFactory<RingBufferLogEvent> {
+
+               @Override
+               public RingBufferLogEvent newInstance() {
+                       return new RingBufferLogEvent();
+               }
+       }
+
+       /** The {@code EventFactory} for {@code RingBufferLogEvent}s. */
+       public static final Factory FACTORY = new Factory();
+
+       private AsyncLogger asyncLogger;
+       private String loggerName;
+       private Marker marker;
+       private String fqcn;
+       private Level level;
+       private Message message;
+       // TODO: Need to track a ThrowableProxy instead of a Throwable.
+       private Throwable thrown;
+       private Map<String, String> contextMap;
+       private ContextStack contextStack;
+       private String threadName;
+       private StackTraceElement location;
+       private long currentTimeMillis;
+       private boolean endOfBatch;
+       private boolean includeLocation;
+
+       public void setValues(final AsyncLogger asyncLogger,
+                       final String loggerName, final Marker marker, final 
String fqcn,
+                       final Level level, final Message data, final Throwable 
t,
+                       final Map<String, String> map, final ContextStack 
contextStack,
+                       final String threadName, final StackTraceElement 
location,
+                       final long currentTimeMillis) {
+               this.asyncLogger = asyncLogger;
+               this.loggerName = loggerName;
+               this.marker = marker;
+               this.fqcn = fqcn;
+               this.level = level;
+               this.message = data;
+               this.thrown = t;
+               this.contextMap = map;
+               this.contextStack = contextStack;
+               this.threadName = threadName;
+               this.location = location;
+               this.currentTimeMillis = currentTimeMillis;
+       }
+
+       /**
+        * Event processor that reads the event from the ringbuffer can call 
this
+        * method.
+        * 
+        * @param endOfBatch
+        *            flag to indicate if this is the last event in a batch 
from the
+        *            RingBuffer
+        */
+       public void execute(final boolean endOfBatch) {
+               this.endOfBatch = endOfBatch;
+               asyncLogger.actualAsyncLog(this);
+       }
+
+       /**
+        * Returns {@code true} if this event is the end of a batch, {@code 
false}
+        * otherwise.
+        * 
+        * @return {@code true} if this event is the end of a batch, {@code 
false}
+        *         otherwise
+        */
+       @Override
+       public boolean isEndOfBatch() {
+               return endOfBatch;
+       }
+
+       @Override
+       public void setEndOfBatch(final boolean endOfBatch) {
+               this.endOfBatch = endOfBatch;
+       }
+
+       @Override
+       public boolean isIncludeLocation() {
+               return includeLocation;
+       }
+
+       @Override
+       public void setIncludeLocation(final boolean includeLocation) {
+               this.includeLocation = includeLocation;
+       }
+
+       @Override
+       public String getLoggerName() {
+               return loggerName;
+       }
+
+       @Override
+       public Marker getMarker() {
+               return marker;
+       }
+
+       @Override
+       public String getLoggerFQCN() {
+               return fqcn;
+       }
+
+       @Override
+       public Level getLevel() {
+               if (level == null) {
+                       level = Level.OFF; // LOG4J2-462, LOG4J2-465
+               }
+               return level;
+       }
+
+       @Override
+       public Message getMessage() {
+               if (message == null) {
+                       message = new SimpleMessage("");
+               }
+               return message;
+       }
+
+       @Override
+       public Throwable getThrown() {
+               return thrown;
+       }
+
+       @Override
+       public ThrowableProxy getThrownProxy() {
+               return new ThrowableProxy(this.thrown);
+       }
+
+       @Override
+       public Map<String, String> getContextMap() {
+               return contextMap;
+       }
+
+       @Override
+       public ContextStack getContextStack() {
+               return contextStack;
+       }
+
+       @Override
+       public String getThreadName() {
+               return threadName;
+       }
+
+       @Override
+       public StackTraceElement getSource() {
+               return location;
+       }
+
+       @Override
+       public long getTimeMillis() {
+               Message msg = getMessage();
+               if (msg instanceof TimestampMessage) { // LOG4J2-455
+                       return ((TimestampMessage) msg).getTimestamp();
+               }
+               return currentTimeMillis;
+       }
+
+       /**
+        * Merges the contents of the specified map into the contextMap, after
+        * replacing any variables in the property values with the
+        * StrSubstitutor-supplied actual values.
+        * 
+        * @param properties
+        *            configured properties
+        * @param strSubstitutor
+        *            used to lookup values of variables in properties
+        */
+       public void mergePropertiesIntoContextMap(
+                       final Map<Property, Boolean> properties,
+                       final StrSubstitutor strSubstitutor) {
+               if (properties == null) {
+                       return; // nothing to do
+               }
+
+               final Map<String, String> map = (contextMap == null) ? new 
HashMap<String, String>()
+                               : new HashMap<String, String>(contextMap);
+
+               for (final Map.Entry<Property, Boolean> entry : 
properties.entrySet()) {
+                       final Property prop = entry.getKey();
+                       if (map.containsKey(prop.getName())) {
+                               continue; // contextMap overrides config 
properties
+                       }
+                       final String value = entry.getValue() ? 
strSubstitutor.replace(prop
+                                       .getValue()) : prop.getValue();
+                       map.put(prop.getName(), value);
+               }
+               contextMap = map;
+       }
+
+       /**
+        * Release references held by ring buffer to allow objects to be
+        * garbage-collected.
+        */
+       public void clear() {
+               setValues(null, // asyncLogger
+                               null, // loggerName
+                               null, // marker
+                               null, // fqcn
+                               null, // level
+                               null, // data
+                               null, // t
+                               null, // map
+                               null, // contextStack
+                               null, // threadName
+                               null, // location
+                               0 // currentTimeMillis
+               );
+       }
 }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
 Fri May  9 19:00:23 2014
@@ -18,6 +18,7 @@ package org.apache.logging.log4j.core.ap
 
 import java.util.Date;
 import java.util.Map;
+
 import javax.persistence.Basic;
 import javax.persistence.Column;
 import javax.persistence.Convert;
@@ -37,6 +38,7 @@ import org.apache.logging.log4j.core.Log
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.LevelAttributeConverter;
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.MessageAttributeConverter;
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.ThrowableAttributeConverter;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
 
 @Entity
@@ -130,6 +132,12 @@ public class TestBaseEntity extends Abst
 
     @Override
     @Transient
+    public ThrowableProxy getThrownProxy() {
+        return this.getWrappedEvent().getThrownProxy();
+    }
+
+    @Override
+    @Transient
     public Map<String, String> getContextMap() {
         return this.getWrappedEvent().getContextMap();
     }

Modified: 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/DateLookupTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/DateLookupTest.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/DateLookupTest.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/DateLookupTest.java
 Fri May  9 19:00:23 2014
@@ -19,12 +19,15 @@ package org.apache.logging.log4j.core.lo
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
+import org.apache.logging.log4j.core.AbstractLogEvent;
 import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
 import org.junit.Test;
 
 import java.util.Calendar;
 import java.util.Map;
+
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertEquals;
 
@@ -43,85 +46,18 @@ public class DateLookupTest {
         assertEquals("12/30/2011", value);
     }
 
-    private class MyLogEvent implements LogEvent {
+    private class MyLogEvent extends AbstractLogEvent {
         /**
          * Generated serial version ID.
          */
         private static final long serialVersionUID = -2663819677970643109L;
 
         @Override
-        public Level getLevel() {
-            return null;
-        }
-
-        @Override
-        public String getLoggerName() {
-            return null;
-        }
-
-        @Override
-        public StackTraceElement getSource() {
-            return null;
-        }
-
-        @Override
-        public Message getMessage() {
-            return null;
-        }
-
-        @Override
-        public Marker getMarker() {
-            return null;
-        }
-
-        @Override
-        public String getThreadName() {
-            return null;
-        }
-
-        @Override
         public long getTimeMillis() {
             final Calendar cal = Calendar.getInstance();
             cal.set(2011, 11, 30, 10, 56, 35);
             return cal.getTimeInMillis();
         }
 
-        @Override
-        public Throwable getThrown() {
-            return null;
-        }
-
-        @Override
-        public Map<String, String> getContextMap() {
-            return null;
-        }
-
-        @Override
-        public ThreadContext.ContextStack getContextStack() {
-            return null;
-        }
-
-        @Override
-        public String getLoggerFQCN() {
-            return null;
-        }
-
-        @Override
-        public boolean isEndOfBatch() {
-            return false;
-        }
-
-        @Override
-        public void setEndOfBatch(final boolean endOfBatch) {
-        }
-
-        @Override
-        public boolean isIncludeLocation() {
-            return false;
-        }
-
-        @Override
-        public void setIncludeLocation(final boolean locationRequired) {
-        }
     }
 }

Modified: 
logging/log4j/log4j2/trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java?rev=1593597&r1=1593596&r2=1593597&view=diff
==============================================================================
--- 
logging/log4j/log4j2/trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
 (original)
+++ 
logging/log4j/log4j2/trunk/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
 Fri May  9 19:00:23 2014
@@ -32,6 +32,7 @@ import org.apache.logging.log4j.ThreadCo
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.helpers.Patterns;
 import org.apache.logging.log4j.core.helpers.UUIDUtil;
+import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.MapMessage;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.StructuredDataId;
@@ -275,6 +276,15 @@ public class FlumeEvent extends SimpleEv
     }
 
     /**
+     * Returns the Throwable associated with the event, if any.
+     * @return the Throwable.
+     */
+    @Override
+    public ThrowableProxy getThrownProxy() {
+        return event.getThrownProxy();
+    }
+
+    /**
      * Returns a copy of the context Map.
      * @return a copy of the context Map.
      */


Reply via email to