You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2015/07/13 15:22:18 UTC

[2/2] logging-log4j2 git commit: prepare for LOG4J2-1074: - strengthen Log4jLogEvent.Builder to contain all attributes - add copy constructor to Log4jLogEvent.Builder - migrate all JUnit tests to construct LogEvents via Log4jLogEvent.Builder - migrate *R

prepare for LOG4J2-1074: 
- strengthen Log4jLogEvent.Builder to contain all attributes
- add copy constructor to Log4jLogEvent.Builder
- migrate all JUnit tests to construct LogEvents via
Log4jLogEvent.Builder
- migrate *RewritePolicy implemenations to construct LogEvents via
Log4jLogEvent.Builder (copy constructor & modify desired attribute)
- deprecate Log4jLogEvent constructors and factory method that no longer
have any references to them

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/14e27b4b
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/14e27b4b
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/14e27b4b

Branch: refs/heads/master
Commit: 14e27b4b8fc9655a2be22ffe254e1bd5b7b1288a
Parents: 9f1c6ad
Author: rpopma <rp...@apache.org>
Authored: Mon Jul 13 22:22:33 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Mon Jul 13 22:22:33 2015 +0900

----------------------------------------------------------------------
 .../rewrite/LoggerNameLevelRewritePolicy.java   |   5 +-
 .../core/appender/rewrite/MapRewritePolicy.java |  11 +-
 .../rewrite/PropertiesRewritePolicy.java        |   5 +-
 .../core/appender/rolling/PatternProcessor.java |   2 +-
 .../log4j/core/async/RingBufferLogEvent.java    |   6 +-
 .../logging/log4j/core/impl/Log4jLogEvent.java  | 265 +++++++++++++------
 .../apache/logging/log4j/core/LogEventTest.java |  46 +++-
 .../core/appender/ConsoleAppenderTest.java      |  17 +-
 .../log4j/core/appender/FileAppenderTest.java   |  13 +-
 .../core/appender/OutputStreamAppenderTest.java |   8 +-
 .../log4j/core/appender/mom/JmsAppenderIT.java  |   8 +-
 .../LoggerNameLevelRewritePolicyTest.java       |  24 +-
 .../appender/rewrite/MapRewritePolicyTest.java  |  45 +++-
 .../appender/rewrite/TestRewritePolicy.java     |   5 +-
 .../rolling/OnStartupTriggeringPolicyTest.java  |   4 +-
 .../core/filter/DynamicThresholdFilterTest.java |   4 +-
 .../log4j/core/filter/MarkerFilterTest.java     |  10 +-
 .../log4j/core/filter/RegexFilterTest.java      |  11 +-
 .../log4j/core/filter/ThresholdFilterTest.java  |  10 +-
 .../log4j/core/filter/TimeFilterTest.java       |   6 +-
 .../log4j/core/impl/Log4jLogEventTest.java      |  29 +-
 .../log4j/core/layout/JsonLayoutTest.java       |   9 +-
 .../log4j/core/layout/LogEventFixtures.java     |  16 +-
 .../log4j/core/layout/PatternLayoutTest.java    |  63 +++--
 .../log4j/core/layout/SerializedLayoutTest.java |  16 +-
 .../log4j/core/layout/XmlLayoutTest.java        |   9 +-
 .../log4j/core/lookup/MarkerLookupTest.java     |  23 +-
 .../core/lookup/StructuredDataLookupTest.java   |   2 +-
 .../pattern/EncodingPatternConverterTest.java   |   7 +-
 .../ExtendedThrowablePatternConverterTest.java  |  26 +-
 .../core/pattern/LevelPatternConverterTest.java |  50 +++-
 .../core/pattern/MapPatternConverterTest.java   |  12 +-
 .../pattern/MarkerPatternConverterTest.java     |   3 +-
 .../core/pattern/MdcPatternConverterTest.java   |  21 +-
 .../pattern/MessagePatternConverterTest.java    |  30 ++-
 .../log4j/core/pattern/PatternParserTest.java   |  60 +++--
 .../pattern/RegexReplacementConverterTest.java  |   7 +-
 .../RootThrowablePatternConverterTest.java      |  16 +-
 .../pattern/ThrowablePatternConverterTest.java  |  56 +++-
 .../log4j/perf/jmh/Log4jLogEventBenchmark.java  |   6 +-
 .../log4j/perf/jmh/PatternLayoutBenchmark.java  |  15 +-
 41 files changed, 687 insertions(+), 294 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
index 36f3e26..617367f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
@@ -84,10 +84,7 @@ public class LoggerNameLevelRewritePolicy implements RewritePolicy {
         if (newLevel == null || newLevel == sourceLevel) {
             return event;
         }
-        final LogEvent result = new Log4jLogEvent(event.getLoggerName(), event.getMarker(), event.getLoggerFqcn(),
-                newLevel, event.getMessage(), event.getThrown(), event.getContextMap(), event.getContextStack(),
-                event.getThreadName(), event.getSource(), event.getTimeMillis());
-
+        final LogEvent result = new Log4jLogEvent.Builder(event).setLevel(newLevel).build();
         return result;
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
index 82aaf5c..ca1f5df 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicy.java
@@ -78,15 +78,8 @@ public final class MapRewritePolicy implements RewritePolicy {
             }
         }
         final MapMessage message = ((MapMessage) msg).newInstance(newMap);
-        if (source instanceof Log4jLogEvent) {
-            final Log4jLogEvent event = (Log4jLogEvent) source;
-            return Log4jLogEvent.createEvent(event.getLoggerName(), event.getMarker(), event.getLoggerFqcn(),
-                event.getLevel(), message, event.getThrown(), event.getThrownProxy(), event.getContextMap(), 
-                event.getContextStack(), event.getThreadName(), event.getSource(), event.getTimeMillis());
-        }
-        return new Log4jLogEvent(source.getLoggerName(), source.getMarker(), source.getLoggerFqcn(), source.getLevel(),
-            message, source.getThrown(), source.getContextMap(), source.getContextStack(), source.getThreadName(),
-            source.getSource(), source.getTimeMillis());
+        final LogEvent result = new Log4jLogEvent.Builder(source).setMessage(message).build();
+        return result;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java
index 486c506..f0e40a7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/PropertiesRewritePolicy.java
@@ -70,9 +70,8 @@ public final class PropertiesRewritePolicy implements RewritePolicy {
                 config.getStrSubstitutor().replace(prop.getValue()) : prop.getValue());
         }
 
-        return new Log4jLogEvent(source.getLoggerName(), source.getMarker(), source.getLoggerFqcn(), source.getLevel(),
-            source.getMessage(), source.getThrown(), props, source.getContextStack(), source.getThreadName(),
-            source.getSource(), source.getTimeMillis());
+        final LogEvent result = new Log4jLogEvent.Builder(source).setContextMap(props).build();
+        return result;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
index c88c613..d4534ad 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/PatternProcessor.java
@@ -205,7 +205,7 @@ public class PatternProcessor {
         // for creating the file name of rolled-over files. 
         final long time = prevFileTime == 0 ? System.currentTimeMillis() : prevFileTime;
         formatFileName(buf, new Date(time), obj);
-        final LogEvent event = new Log4jLogEvent(time);
+        final LogEvent event = new Log4jLogEvent.Builder().setTimeMillis(time).build();
         final String fileName = subst.replace(event, buf);
         buf.setLength(0);
         buf.append(fileName);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
index 87b70a4..9644cfb 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/RingBufferLogEvent.java
@@ -261,9 +261,7 @@ public class RingBufferLogEvent implements LogEvent {
      * @return a new immutable copy of the data in this {@code RingBufferLogEvent}
      */
     public LogEvent createMemento() {
-        // Ideally, would like to use the LogEventFactory here but signature does not match:
-        // results in factory re-creating the timestamp, context map and context stack, which we don't want.
-        return new Log4jLogEvent(loggerName, marker, fqcn, level, message, thrown, contextMap, contextStack,
-                threadName, location, currentTimeMillis);
+        final LogEvent result = new Log4jLogEvent.Builder(this).build();
+        return result;
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
index e57aa2e..00b8b2d 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
@@ -67,19 +67,45 @@ public class Log4jLogEvent implements LogEvent {
         private String loggerName;
         private Message message;
         private Throwable thrown;
-
-        public Builder setLoggerFqcn(final String loggerFqcn) {
-            this.loggerFqcn = loggerFqcn;
-            return this;
+        private long timeMillis = clock.currentTimeMillis();
+        private ThrowableProxy thrownProxy;
+        private Map<String, String> contextMap = ThreadContext.getImmutableContext();
+        private ThreadContext.ContextStack contextStack = ThreadContext.getImmutableStack();
+        private String threadName = null;
+        private StackTraceElement source;
+        private boolean includeLocation;
+        private boolean endOfBatch = false;
+        
+        public Builder() {
+        }
+        
+        public Builder(LogEvent other) {
+            Objects.requireNonNull(other);
+            this.loggerFqcn = other.getLoggerFqcn();
+            this.marker = other.getMarker();
+            this.level = other.getLevel();
+            this.loggerName = other.getLoggerName();
+            this.message = other.getMessage();
+            this.timeMillis = other.getTimeMillis();
+            this.thrown = other.getThrown();
+            // avoid creating thrownProxy until necessary
+            this.thrownProxy = other instanceof Log4jLogEvent ? ((Log4jLogEvent) other).thrownProxy 
+                    : other.getThrownProxy();
+            this.contextMap = other.getContextMap();
+            this.contextStack = other.getContextStack();
+            this.source = other.getSource();
+            this.threadName = other.getThreadName();
+            this.includeLocation = other.isIncludeLocation();
+            this.endOfBatch = other.isEndOfBatch();
         }
 
-        public Builder setMarker(final Marker marker) {
-            this.marker = marker;
+        public Builder setLevel(final Level level) {
+            this.level = level;
             return this;
         }
 
-        public Builder setLevel(final Level level) {
-            this.level = level;
+        public Builder setLoggerFqcn(final String loggerFqcn) {
+            this.loggerFqcn = loggerFqcn;
             return this;
         }
 
@@ -88,6 +114,11 @@ public class Log4jLogEvent implements LogEvent {
             return this;
         }
 
+        public Builder setMarker(final Marker marker) {
+            this.marker = marker;
+            return this;
+        }
+
         public Builder setMessage(final Message message) {
             this.message = message;
             return this;
@@ -98,100 +129,162 @@ public class Log4jLogEvent implements LogEvent {
             return this;
         }
 
-        @Override
-        public Log4jLogEvent build() {
-            return new Log4jLogEvent(loggerName, marker, loggerFqcn, level, message, thrown);
+        public Builder setTimeMillis(long timeMillis) {
+            this.timeMillis = timeMillis;
+            return this;
         }
-    }
 
-    public static Builder newBuilder() {
-        return new Builder();
-    }
+        public Builder setThrownProxy(ThrowableProxy thrownProxy) {
+            this.thrownProxy = thrownProxy;
+            return this;
+        }
 
-    public Log4jLogEvent() {
-        this(clock.currentTimeMillis());
-    }
+        public Builder setContextMap(Map<String, String> contextMap) {
+            this.contextMap = contextMap;
+            return this;
+        }
 
-    /**
-     *
-     */
-    public Log4jLogEvent(final long timestamp) {
-        this(Strings.EMPTY, null, Strings.EMPTY, null, null, (Throwable) null, null, null, null, null, timestamp);
+        public Builder setContextStack(ThreadContext.ContextStack contextStack) {
+            this.contextStack = contextStack;
+            return this;
+        }
+
+        public Builder setThreadName(String threadName) {
+            this.threadName = threadName;
+            return this;
+        }
+
+        public Builder setSource(StackTraceElement source) {
+            this.source = source;
+            return this;
+        }
+
+        public Builder setIncludeLocation(boolean includeLocation) {
+            this.includeLocation = includeLocation;
+            return this;
+        }
+
+        public Builder setEndOfBatch(boolean endOfBatch) {
+            this.endOfBatch = endOfBatch;
+            return this;
+        }
+
+        @Override
+        public Log4jLogEvent build() {
+            final Log4jLogEvent result = new Log4jLogEvent(loggerName, marker, loggerFqcn, level, message, thrown, 
+                    thrownProxy, contextMap, contextStack, threadName, source, timeMillis);
+            result.setIncludeLocation(includeLocation);
+            result.setEndOfBatch(endOfBatch);
+            return result;
+        }
     }
 
     /**
-     * Constructor.
-     * @param loggerName The name of the Logger.
-     * @param marker The Marker or null.
-     * @param loggerFQCN The fully qualified class name of the caller.
-     * @param level The logging Level.
-     * @param message The Message.
-     * @param t A Throwable or null.
+     * Returns a new empty {@code Log4jLogEvent.Builder} with all fields empty.
+     * @return a new empty builder.
      */
-    public Log4jLogEvent(final String loggerName, final Marker marker, final String loggerFQCN, final Level level,
-                         final Message message, final Throwable t) {
-        this(loggerName, marker, loggerFQCN, level, message, null, t);
+    public static Builder newBuilder() {
+        return new Builder();
     }
-
+    
     /**
-     * Constructor.
-     * @param loggerName The name of the Logger.
-     * @param marker The Marker or null.
-     * @param loggerFQCN The fully qualified class name of the caller.
-     * @param level The logging Level.
-     * @param message The Message.
-     * @param properties properties to add to the event.
-     * @param t A Throwable or null.
+     * Returns a new fully initialized {@code Log4jLogEvent.Builder} containing a copy of all fields of this event.
+     * @return a new fully initialized builder.
      */
-    public Log4jLogEvent(final String loggerName, final Marker marker, final String loggerFQCN, final Level level,
-                         final Message message, final List<Property> properties, final Throwable t) {
-        this(loggerName, marker, loggerFQCN, level, message, t,
-            createMap(properties),
-            ThreadContext.getDepth() == 0 ? null : ThreadContext.cloneStack(), null,
-            null,
-            // LOG4J2-628 use log4j.Clock for timestamps
-            // LOG4J2-744 unless TimestampMessage already has one
-            message instanceof TimestampMessage ? ((TimestampMessage) message).getTimestamp() :
-                clock.currentTimeMillis());
+    public Builder asBuilder() {
+        return new Builder(this);
     }
 
-    /**
-     * Constructor.
-     * @param loggerName The name of the Logger.
-     * @param marker The Marker or null.
-     * @param loggerFQCN The fully qualified class name of the caller.
-     * @param level The logging Level.
-     * @param message The Message.
-     * @param t A Throwable or null.
-     * @param mdc The mapped diagnostic context.
-     * @param ndc the nested diagnostic context.
-     * @param threadName The name of the thread.
-     * @param location The locations of the caller.
-     * @param timestamp The timestamp of the event.
-     */
-    public Log4jLogEvent(final String loggerName, final Marker marker, final String loggerFQCN, final Level level,
-                         final Message message, final Throwable t, final Map<String, String> mdc,
-                         final ThreadContext.ContextStack ndc, final String threadName,
-                         final StackTraceElement location, final long timestamp) {
-        this(loggerName, marker, loggerFQCN, level, message, t, null, mdc, ndc, threadName,
-                location, timestamp);
+    public Log4jLogEvent() {
+        this(clock.currentTimeMillis());
     }
 
     /**
-     * Create a new LogEvent.
-     * @param loggerName The name of the Logger.
-     * @param marker The Marker or null.
-     * @param loggerFQCN The fully qualified class name of the caller.
-     * @param level The logging Level.
-     * @param message The Message.
-     * @param thrown A Throwable or null.
-     * @param thrownProxy A ThrowableProxy or null.
-     * @param mdc The mapped diagnostic context.
-     * @param ndc the nested diagnostic context.
-     * @param threadName The name of the thread.
-     * @param location The locations of the caller.
-     * @param timestamp The timestamp of the event.
-     */
+    *
+    * @deprecated use {@link Log4jLogEvent.Builder} instead. This constructor will be removed in an upcoming release.
+    */
+   public Log4jLogEvent(final long timestamp) {
+       this(Strings.EMPTY, null, Strings.EMPTY, null, null, (Throwable) null, null, null, null, null, null, timestamp);
+   }
+
+   /**
+    * Constructor.
+    * @param loggerName The name of the Logger.
+    * @param marker The Marker or null.
+    * @param loggerFQCN The fully qualified class name of the caller.
+    * @param level The logging Level.
+    * @param message The Message.
+    * @param t A Throwable or null.
+    * @deprecated use {@link Log4jLogEvent.Builder} instead. This constructor will be removed in an upcoming release.
+    */
+   public Log4jLogEvent(final String loggerName, final Marker marker, final String loggerFQCN, final Level level,
+                        final Message message, final Throwable t) {
+       this(loggerName, marker, loggerFQCN, level, message, null, t);
+   }
+
+   /**
+    * Constructor.
+    * @param loggerName The name of the Logger.
+    * @param marker The Marker or null.
+    * @param loggerFQCN The fully qualified class name of the caller.
+    * @param level The logging Level.
+    * @param message The Message.
+    * @param properties properties to add to the event.
+    * @param t A Throwable or null.
+    */
+   // This constructor is called from DefaultLogEventFactory and is in the hot path.
+   // Do not replace this constructor with a Builder.
+   public Log4jLogEvent(final String loggerName, final Marker marker, final String loggerFQCN, final Level level,
+                        final Message message, final List<Property> properties, final Throwable t) {
+       this(loggerName, marker, loggerFQCN, level, message, t, null,
+           createMap(properties),
+           ThreadContext.getDepth() == 0 ? null : ThreadContext.cloneStack(), null,
+           null,
+           // LOG4J2-628 use log4j.Clock for timestamps
+           // LOG4J2-744 unless TimestampMessage already has one
+           message instanceof TimestampMessage ? ((TimestampMessage) message).getTimestamp() :
+               clock.currentTimeMillis());
+   }
+
+   /**
+    * Constructor.
+    * @param loggerName The name of the Logger.
+    * @param marker The Marker or null.
+    * @param loggerFQCN The fully qualified class name of the caller.
+    * @param level The logging Level.
+    * @param message The Message.
+    * @param t A Throwable or null.
+    * @param mdc The mapped diagnostic context.
+    * @param ndc the nested diagnostic context.
+    * @param threadName The name of the thread.
+    * @param location The locations of the caller.
+    * @param timestampMillis The timestamp of the event.
+    * @deprecated use {@link Log4jLogEvent.Builder} instead. This constructor will be removed in an upcoming release.
+    */
+   public Log4jLogEvent(final String loggerName, final Marker marker, final String loggerFQCN, final Level level,
+                        final Message message, final Throwable t, final Map<String, String> mdc,
+                        final ThreadContext.ContextStack ndc, final String threadName,
+                        final StackTraceElement location, final long timestampMillis) {
+       this(loggerName, marker, loggerFQCN, level, message, t, null, mdc, ndc, threadName,
+               location, timestampMillis);
+   }
+
+   /**
+    * Create a new LogEvent.
+    * @param loggerName The name of the Logger.
+    * @param marker The Marker or null.
+    * @param loggerFQCN The fully qualified class name of the caller.
+    * @param level The logging Level.
+    * @param message The Message.
+    * @param thrown A Throwable or null.
+    * @param thrownProxy A ThrowableProxy or null.
+    * @param mdc The mapped diagnostic context.
+    * @param ndc the nested diagnostic context.
+    * @param threadName The name of the thread.
+    * @param location The locations of the caller.
+    * @param timestamp The timestamp of the event.
+    * @deprecated use {@link Log4jLogEvent.Builder} instead. This method will be removed in an upcoming release.
+    */
     public static Log4jLogEvent createEvent(final String loggerName, final Marker marker, final String loggerFQCN,
                                             final Level level, final Message message, final Throwable thrown, 
                                             final ThrowableProxy thrownProxy,

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventTest.java
index 354c112..8ba225b 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/LogEventTest.java
@@ -37,12 +37,21 @@ public class LogEventTest {
 
     @Test
     public void testSerialization() throws Exception {
-        final LogEvent event1 = new Log4jLogEvent(this.getClass().getName(), null, "org.apache.logging.log4j.core.Logger",
-            Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final LogEvent event1 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")) //
+                .build();
         final Exception parent = new IllegalStateException("Test");
         final Throwable child = new LoggingException("This is a test", parent);
-        final LogEvent event2 = new Log4jLogEvent(this.getClass().getName(), null, "org.apache.logging.log4j.core.Logger",
-            Level.INFO, new SimpleMessage("Hello, world!"), child);
+        final LogEvent event2 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")) //
+                .setThrown(child) //
+                .build();
 
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         final ObjectOutputStream oos = new ObjectOutputStream(baos);
@@ -51,26 +60,37 @@ public class LogEventTest {
 
         final ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
         final ObjectInputStream ois = new ObjectInputStream(bais);
-        LogEvent returned;
         try {
-            returned = (LogEvent) ois.readObject();
+            ois.readObject();
         } catch (final IOException ioe) {
             fail("Exception processing event1");
         }
         try {
-            returned = (LogEvent) ois.readObject();
+            ois.readObject();
         } catch (final IOException ioe) {
             fail("Exception processing event2");
         }
     }
 
     public void testEquals() {
-        final LogEvent event1 = new Log4jLogEvent(this.getClass().getName(), null, "org.apache.logging.log4j.core.Logger",
-            Level.INFO, new SimpleMessage("Hello, world!"), null);
-        final LogEvent event2 = new Log4jLogEvent(this.getClass().getName(), null, "org.apache.logging.log4j.core.Logger",
-            Level.INFO, new SimpleMessage("Hello, Apache!"), null);
-        final LogEvent event3 = new Log4jLogEvent(this.getClass().getName(), null, "org.apache.logging.log4j.core.Logger",
-            Level.INFO, new SimpleMessage("Hello, Apache!"), null);
+        final LogEvent event1 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")) //
+                .build();
+        final LogEvent event2 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")) //
+                .build();
+        final LogEvent event3 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")) //
+                .build();
         assertNotEquals("Events should not be equal", event1, event2);
         assertEquals("Events should be equal", event2, event3);
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
index 5c91417..0c002a0 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/ConsoleAppenderTest.java
@@ -19,6 +19,7 @@ package org.apache.logging.log4j.core.appender;
 import static org.easymock.EasyMock.anyInt;
 import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.expectLastCall;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -103,8 +104,12 @@ public class ConsoleAppenderTest {
             app.start();
             assertTrue("Appender did not start", app.isStarted());
 
-            final LogEvent event = new Log4jLogEvent("TestLogger", null, ConsoleAppenderTest.class.getName(),
-                    Level.INFO, new SimpleMessage("Test"), null);
+            final LogEvent event = Log4jLogEvent.newBuilder() //
+                    .setLoggerName("TestLogger") //
+                    .setLoggerFqcn(ConsoleAppenderTest.class.getName()) //
+                    .setLevel(Level.INFO) //
+                    .setMessage(new SimpleMessage("Test")) //
+                    .build();
             app.append(event);
 
             app.stop();
@@ -130,8 +135,12 @@ public class ConsoleAppenderTest {
                 .setIgnoreExceptions(false).build();
         app.start();
         try {
-            final LogEvent event = new Log4jLogEvent("TestLogger", null, ConsoleAppenderTest.class.getName(),
-                    Level.INFO, new SimpleMessage("Test"), null);
+            final LogEvent event = Log4jLogEvent.newBuilder() //
+                    .setLoggerName("TestLogger") //
+                    .setLoggerFqcn(ConsoleAppenderTest.class.getName()) //
+                    .setLevel(Level.INFO) //
+                    .setMessage(new SimpleMessage("Test")) //
+                    .build();
 
             assertTrue("Appender did not start", app.isStarted());
             systemSetter.systemSet(new PrintStream(baos));

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
index 5043085..df0b2b2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/FileAppenderTest.java
@@ -77,9 +77,10 @@ public class FileAppenderTest {
         long prevLen = curLen;
         assertTrue("File length: " + curLen, curLen == 0);
         for (int i = 0; i < 100; ++i) {
-            final LogEvent event = new Log4jLogEvent("TestLogger", null, FileAppenderTest.class.getName(), Level.INFO,
-                    new SimpleMessage("Test"), null, null, null, this.getClass().getSimpleName(), null,
-                    System.currentTimeMillis());
+            final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger") //
+                    .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO) //
+                    .setMessage(new SimpleMessage("Test")).setThreadName(this.getClass().getSimpleName()) //
+                    .setTimeMillis(System.currentTimeMillis()).build();
             try {
                 appender.append(event);
                 curLen = file.length();
@@ -166,8 +167,10 @@ public class FileAppenderTest {
         app.start();
         assertTrue("Appender did not start", app.isStarted());
         for (int i = 0; i < count; ++i) {
-            final LogEvent event = new Log4jLogEvent("TestLogger", null, FileAppenderTest.class.getName(), Level.INFO,
-                    new SimpleMessage("Test"), null, null, null, name, null, System.currentTimeMillis());
+            final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName("TestLogger")
+                    .setLoggerFqcn(FileAppenderTest.class.getName()).setLevel(Level.INFO)
+                    .setMessage(new SimpleMessage("Test")).setThreadName(name).setTimeMillis(System.currentTimeMillis())
+                    .build();
             try {
                 app.append(event);
                 Thread.sleep(25); // Give up control long enough for another thread/process to occasionally do

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
index b8163a4..892146e 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/OutputStreamAppenderTest.java
@@ -61,8 +61,12 @@ public class OutputStreamAppenderTest {
     }
 
     private void assertMessage(final String string, final InMemoryAppender app, final String header) {
-        final LogEvent event = new Log4jLogEvent("TestLogger", null, OutputStreamAppenderTest.class.getName(),
-                Level.INFO, new SimpleMessage("Test"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName("TestLogger") //
+                .setLoggerFqcn(OutputStreamAppenderTest.class.getName()) //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Test")) //
+                .build();
         app.start();
         assertTrue("Appender did not start", app.isStarted());
         app.append(event);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
index 0c654a3..58f4f63 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/mom/JmsAppenderIT.java
@@ -22,6 +22,7 @@ import java.util.Collection;
 import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+
 import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
@@ -80,9 +81,10 @@ public class JmsAppenderIT {
         final String messageText = "Hello, World!";
         final String loggerName = this.getClass().getName();
         for (int i = 0; i < messageCount; i++) {
-            final LogEvent event = Log4jLogEvent.createEvent(loggerName, null, loggerName, Level.ERROR,
-                new SimpleMessage(messageText), null, null, null, null, Thread.currentThread().getName(), null,
-                System.currentTimeMillis());
+            final LogEvent event = Log4jLogEvent.newBuilder().setLoggerName(loggerName) //
+                    .setLoggerFqcn(loggerName).setLevel(Level.INFO) //
+                    .setMessage(new SimpleMessage(messageText)).setThreadName(Thread.currentThread().getName()) //
+                    .setTimeMillis(System.currentTimeMillis()).build();
             appender.append(event);
         }
         consumer.awaitAndAssertAllMessagesConsumed();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
index 41bb068..a30a0e6 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicyTest.java
@@ -37,23 +37,31 @@ public class LoggerNameLevelRewritePolicyTest {
                 new KeyValuePair("INFO", "DEBUG"),
                 new KeyValuePair("WARN", "INFO") };
         final String loggerNameRewrite = "com.foo.bar";
-        LogEvent logEvent = new Log4jLogEvent(loggerNameRewrite, null, "LoggerNameLevelRewritePolicyTest.testUpdate()",
-                Level.INFO, new SimpleMessage("Test"), new RuntimeException("test"), null, null, "none", null, 1);
+        LogEvent logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameRewrite)
+                .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.INFO)
+                .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
+                .setTimeMillis(1).build();
         final LoggerNameLevelRewritePolicy updatePolicy = LoggerNameLevelRewritePolicy.createPolicy(loggerNameRewrite,
                 rewrite);
         LogEvent rewritten = updatePolicy.rewrite(logEvent);
         Assert.assertEquals(Level.DEBUG, rewritten.getLevel());
-        logEvent = new Log4jLogEvent(loggerNameRewrite, null, "LoggerNameLevelRewritePolicyTest.testUpdate()",
-                Level.WARN, new SimpleMessage("Test"), new RuntimeException("test"), null, null, "none", null, 1);
+        logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameRewrite)
+                .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.WARN)
+                .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
+                .setTimeMillis(1).build();
         rewritten = updatePolicy.rewrite(logEvent);
         Assert.assertEquals(Level.INFO, rewritten.getLevel());
         final String loggerNameReadOnly = "com.nochange";
-        logEvent = new Log4jLogEvent(loggerNameReadOnly, null, "LoggerNameLevelRewritePolicyTest.testUpdate()",
-                Level.INFO, new SimpleMessage("Test"), new RuntimeException("test"), null, null, "none", null, 1);
+        logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameReadOnly)
+                .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.INFO)
+                .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
+                .setTimeMillis(1).build();
         rewritten = updatePolicy.rewrite(logEvent);
         Assert.assertEquals(Level.INFO, rewritten.getLevel());
-        logEvent = new Log4jLogEvent(loggerNameReadOnly, null, "LoggerNameLevelRewritePolicyTest.testUpdate()",
-                Level.WARN, new SimpleMessage("Test"), new RuntimeException("test"), null, null, "none", null, 1);
+        logEvent = Log4jLogEvent.newBuilder().setLoggerName(loggerNameReadOnly)
+                .setLoggerFqcn("LoggerNameLevelRewritePolicyTest.testUpdate()").setLevel(Level.WARN)
+                .setMessage(new SimpleMessage("Test")).setThrown(new RuntimeException("test")).setThreadName("none")
+                .setTimeMillis(1).build();
         rewritten = updatePolicy.rewrite(logEvent);
         Assert.assertEquals(Level.WARN, rewritten.getLevel());
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
index 1aef5fc..6ad8617 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/MapRewritePolicyTest.java
@@ -35,6 +35,7 @@ import org.junit.Test;
 
 import static org.apache.logging.log4j.hamcrest.MapMatchers.hasSize;
 import static org.hamcrest.Matchers.hasEntry;
+
 import static org.junit.Assert.*;
 
 
@@ -47,20 +48,38 @@ public class MapRewritePolicyTest {
     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);
+        logEvent0 = Log4jLogEvent.newBuilder() //
+                .setLoggerName("test") //
+                .setContextMap(map) //
+                .setLoggerFqcn("MapRewritePolicyTest.setupClass()") //
+                .setLevel(Level.ERROR) //
+                .setMessage(new SimpleMessage("Test")) //
+                .setThrown(new RuntimeException("test")) //
+                .setThreadName("none")
+                .setSource(new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 28))
+                .setTimeMillis(2).build();
+
+        logEvent1 = ((Log4jLogEvent) logEvent0).asBuilder() //
+                .setMessage(new MapMessage(map)) //
+                .setSource(new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 29)) //
+                .build();
+
         final ThreadContextStack stack = new MutableThreadContextStack(new ArrayList<>(map.values()));
-        logEvent2 = new Log4jLogEvent("test", MarkerManager.getMarker("test"), "MapRewritePolicyTest.setupClass()",
-            Level.TRACE, new StructuredDataMessage("test", "Nothing", "test", map), new RuntimeException("test"), null,
-            stack, "none", new StackTraceElement("MapRewritePolicyTest",
-            "setupClass", "MapRewritePolicyTest", 30), 20000000);
-        logEvent3 = new Log4jLogEvent("test", null, "MapRewritePolicyTest.setupClass()", Level.ALL, new MapMessage(map),
-            null, map, stack, null, new StackTraceElement("MapRewritePolicyTest",
-            "setupClass", "MapRewritePolicyTest", 31), Long.MAX_VALUE);
+        logEvent2 = ((Log4jLogEvent) logEvent0).asBuilder() //
+                .setContextStack(stack) //
+                .setMarker(MarkerManager.getMarker("test")) //
+                .setLevel(Level.TRACE) //
+                .setMessage(new StructuredDataMessage("test", "Nothing", "test", map)) //
+                .setTimeMillis(20000000) //
+                .setSource(new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 30)) //
+                .build();
+        logEvent3 = ((Log4jLogEvent) logEvent0).asBuilder() //
+                .setContextStack(stack) //
+                .setLevel(Level.ALL) //
+                .setMessage(new MapMessage(map)) //
+                .setTimeMillis(Long.MAX_VALUE) //
+                .setSource(new StackTraceElement("MapRewritePolicyTest", "setupClass", "MapRewritePolicyTest", 31)) //
+                .build();
         rewrite = new KeyValuePair[]{new KeyValuePair("test2", "2"), new KeyValuePair("test3", "three")};
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/TestRewritePolicy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/TestRewritePolicy.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/TestRewritePolicy.java
index 3b720b1..99dc33c 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/TestRewritePolicy.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rewrite/TestRewritePolicy.java
@@ -29,10 +29,7 @@ public class TestRewritePolicy implements RewritePolicy {
 
     @Override
     public LogEvent rewrite(final LogEvent source) {
-
-        return new Log4jLogEvent(source.getLoggerName(), source.getMarker(), source.getLoggerFqcn(), source.getLevel(),
-            source.getMessage(), source.getThrown(), source.getContextMap(), source.getContextStack(),
-            source.getThreadName(), source.getSource(), source.getTimeMillis());
+        return new Log4jLogEvent.Builder(source).build();
     }
 
     @PluginFactory

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
index c0306af..ba593a3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/rolling/OnStartupTriggeringPolicyTest.java
@@ -36,7 +36,9 @@ public class OnStartupTriggeringPolicyTest {
         OnStartupTriggeringPolicy policy = OnStartupTriggeringPolicy.createPolicy();
         final MyRollingManager manager = new MyRollingManager(policy, null);
         manager.setFileTime(System.currentTimeMillis() - 36000000);
-        final LogEvent event = new Log4jLogEvent(null, null, null, Level.ERROR, new SimpleMessage("Test"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLevel(Level.ERROR) //
+                .setMessage(new SimpleMessage("Test")).build();
         assertTrue("Expected trigger to succeed", policy.isTriggeringEvent(event));
         assertTrue("Expected trigger not to fire", !policy.isTriggeringEvent(event));
         policy = OnStartupTriggeringPolicy.createPolicy();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
index 61fb269..9f0859a 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilterTest.java
@@ -66,9 +66,9 @@ public class DynamicThresholdFilterTest {
         ThreadContext.clearMap();
         ThreadContext.put("userid", "JohnDoe");
         ThreadContext.put("organization", "apache");
-        LogEvent event = new Log4jLogEvent(null, null, null, Level.DEBUG, new SimpleMessage("Test"), null);
+        LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.DEBUG).setMessage(new SimpleMessage("Test")).build();
         assertSame(Filter.Result.DENY, filter.filter(event));
-        event = new Log4jLogEvent(null, null, null, Level.ERROR, new SimpleMessage("Test"), null);
+        event = Log4jLogEvent.newBuilder().setLevel(Level.ERROR).setMessage(new SimpleMessage("Test")).build();
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
         ThreadContext.clearMap();
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
index 63adcd5..a7b77b1 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/MarkerFilterTest.java
@@ -46,12 +46,18 @@ public class MarkerFilterTest {
         assertSame(Filter.Result.NEUTRAL, filter.filter(null, null, child, null, (Throwable) null));
         assertSame(Filter.Result.NEUTRAL, filter.filter(null, null, grandChild, null, (Throwable) null));
         filter.stop();
-        LogEvent event = new Log4jLogEvent(null, grandChild, null, Level.DEBUG, new SimpleMessage("Test"), null);
+        LogEvent event = Log4jLogEvent.newBuilder() //
+                .setMarker(grandChild) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
         filter = MarkerFilter.createFilter("Child", null, null);
         filter.start();
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
-        event = new Log4jLogEvent(null, sibling, null, Level.DEBUG, new SimpleMessage("Test"), null);
+        event = Log4jLogEvent.newBuilder() //
+                .setMarker(sibling) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         assertSame(Filter.Result.DENY, filter.filter(event));
         filter.stop();
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
index 2ce5a51..01d3a32 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/RegexFilterTest.java
@@ -50,10 +50,15 @@ public class RegexFilterTest {
         assertSame(Filter.Result.NEUTRAL,
                 filter.filter(null, Level.DEBUG, null, "This is a test message", (Throwable) null));
         assertSame(Filter.Result.DENY, filter.filter(null, Level.ERROR, null, "This is not a test", (Throwable) null));
-        LogEvent event = new Log4jLogEvent(null, null, null, Level.DEBUG, new SimpleMessage("Another test message"),
-                null);
+        LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("Another test message")) //
+                .build();
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
-        event = new Log4jLogEvent(null, null, null, Level.ERROR, new SimpleMessage("test"), null);
+        event = Log4jLogEvent.newBuilder() //
+                .setLevel(Level.ERROR) //
+                .setMessage(new SimpleMessage("test")) //
+                .build();
         assertSame(Filter.Result.DENY, filter.filter(event));
         filter = RegexFilter.createFilter(null, null, false, null, null);
         assertNull(filter);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
index 93219b1..9a71208 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/ThresholdFilterTest.java
@@ -37,9 +37,15 @@ public class ThresholdFilterTest {
         assertTrue(filter.isStarted());
         assertSame(Filter.Result.DENY, filter.filter(null, Level.DEBUG, null, null, (Throwable) null));
         assertSame(Filter.Result.NEUTRAL, filter.filter(null, Level.ERROR, null, null, (Throwable) null));
-        LogEvent event = new Log4jLogEvent(null, null, null, Level.DEBUG, new SimpleMessage("Test"), null);
+        LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("Test")) //
+                .build();
         assertSame(Filter.Result.DENY, filter.filter(event));
-        event = new Log4jLogEvent(null, null, null, Level.ERROR, new SimpleMessage("Test"), null);
+        event = Log4jLogEvent.newBuilder() //
+                .setLevel(Level.ERROR) //
+                .setMessage(new SimpleMessage("Test")) //
+                .build();
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
index f261faa..d2e5be8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/filter/TimeFilterTest.java
@@ -40,16 +40,16 @@ public class TimeFilterTest {
         final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/LosAngeles"));
         cal.set(Calendar.HOUR_OF_DAY, 2);
         long tod = cal.getTimeInMillis();
-        LogEvent event = new Log4jLogEvent(null, null, null, null, null, null, null, null, null, null, tod);
+        LogEvent event = Log4jLogEvent.newBuilder().setTimeMillis(tod).build();
         assertSame(Filter.Result.NEUTRAL, filter.filter(null, Level.ERROR, null, null, (Throwable) null));
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
         cal.roll(Calendar.DAY_OF_MONTH, true);
         tod = cal.getTimeInMillis();
-        event = new Log4jLogEvent(null, null, null, null, null, null, null, null, null, null, tod);
+        event = Log4jLogEvent.newBuilder().setTimeMillis(tod).build();
         assertSame(Filter.Result.NEUTRAL, filter.filter(event));
         cal.set(Calendar.HOUR_OF_DAY, 4);
         tod = cal.getTimeInMillis();
-        event = new Log4jLogEvent(null, null, null, null, null, null, null, null, null, null, tod);
+        event = Log4jLogEvent.newBuilder().setTimeMillis(tod).build();
         assertSame(Filter.Result.DENY, filter.filter(event));
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
index bf3af14..540bfeb 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
@@ -26,6 +26,7 @@ import javax.xml.bind.DatatypeConverter;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.util.Clock;
 import org.apache.logging.log4j.core.util.ClockFactory;
 import org.apache.logging.log4j.core.util.ClockFactoryTest;
@@ -67,8 +68,12 @@ public class Log4jLogEventTest {
 
     @Test
     public void testJavaIoSerializable() throws Exception {
-        final Log4jLogEvent evt = new Log4jLogEvent("some.test", null, Strings.EMPTY, Level.INFO, new SimpleMessage(
-                "abc"), null);
+        final Log4jLogEvent evt = Log4jLogEvent.newBuilder() //
+                .setLoggerName("some.test") //
+                .setLoggerFqcn(Strings.EMPTY) //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("abc")) //
+                .build();
 
         final byte[] binary = serialize(evt);
         final Log4jLogEvent evt2 = deserialize(binary);
@@ -91,8 +96,13 @@ public class Log4jLogEventTest {
     @Test
     public void testJavaIoSerializableWithThrown() throws Exception {
         final Error thrown = new InternalError("test error");
-        final Log4jLogEvent evt = new Log4jLogEvent("some.test", null, Strings.EMPTY, Level.INFO, new SimpleMessage(
-                "abc"), thrown);
+        final Log4jLogEvent evt = Log4jLogEvent.newBuilder() //
+                .setLoggerName("some.test") //
+                .setLoggerFqcn(Strings.EMPTY) //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("abc")) //
+                .setThrown(thrown) //
+                .build();
 
         final byte[] binary = serialize(evt);
         final Log4jLogEvent evt2 = deserialize(binary);
@@ -174,21 +184,14 @@ public class Log4jLogEventTest {
 
     @Test
     public void testNullLevelReplacedWithOFF() throws Exception {
-        final Marker marker = null;
-        final Throwable t = null;
         final Level NULL_LEVEL = null;
-        final Log4jLogEvent evt = new Log4jLogEvent("some.test", marker, Strings.EMPTY, NULL_LEVEL, new SimpleMessage(
-                "abc"), t);
+        final Log4jLogEvent evt = Log4jLogEvent.newBuilder().setLevel(NULL_LEVEL).build();
         assertEquals(Level.OFF, evt.getLevel());
     }
 
     @Test
     public void testTimestampGeneratedByClock() {
-        final Marker marker = null;
-        final Throwable t = null;
-        final Level NULL_LEVEL = null;
-        final Log4jLogEvent evt = new Log4jLogEvent("some.test", marker, Strings.EMPTY, NULL_LEVEL, new SimpleMessage(
-                "abc"), t);
+        final LogEvent evt = Log4jLogEvent.newBuilder().build();
         assertEquals(FixedTimeClock.FIXED_TIME, evt.getTimeMillis());
 
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/JsonLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/JsonLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/JsonLayoutTest.java
index f8e67b2..170d0e3 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/JsonLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/JsonLayoutTest.java
@@ -253,8 +253,13 @@ public class JsonLayoutTest {
     @Test
     public void testLayoutLoggerName() throws Exception {
         final AbstractJacksonLayout layout = JsonLayout.createLayout(false, false, false, true, false, StandardCharsets.UTF_8);
-        final Log4jLogEvent expected = Log4jLogEvent.createEvent("a.B", null, "f.q.c.n", Level.DEBUG, 
-                new SimpleMessage("M"), null, null, null, null, "threadName", null, 1);
+        final Log4jLogEvent expected = Log4jLogEvent.newBuilder() //
+                .setLoggerName("a.B") //
+                .setLoggerFqcn("f.q.c.n") //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("M")) //
+                .setThreadName("threadName") //
+                .setTimeMillis(1).build();
         final String str = layout.toSerializable(expected);
         assertTrue(str, str.contains("\"loggerName\":\"a.B\""));
         final Log4jLogEvent actual = new Log4jJsonObjectMapper().readValue(str, Log4jLogEvent.class);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/LogEventFixtures.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/LogEventFixtures.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/LogEventFixtures.java
index 7781556..eb1a6c2 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/LogEventFixtures.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/LogEventFixtures.java
@@ -63,9 +63,19 @@ class LogEventFixtures {
         contextStack.clear();
         contextStack.push("stack_msg1");
         contextStack.add("stack_msg2");
-        final Log4jLogEvent expected = Log4jLogEvent.createEvent("a.B", cMarker, "f.q.c.n", Level.DEBUG, 
-                new SimpleMessage("Msg"), ioException, throwableProxy, contextMap, contextStack, "MyThreadName", source,
-                1);
+        final Log4jLogEvent expected = Log4jLogEvent.newBuilder() //
+                .setLoggerName("a.B") //
+                .setMarker(cMarker) //
+                .setLoggerFqcn("f.q.c.n") //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("Msg")) //
+                .setThrown(ioException) //
+                .setThrownProxy(throwableProxy) //
+                .setContextMap(contextMap) //
+                .setContextStack(contextStack) //
+                .setThreadName("MyThreadName") //
+                .setSource(source) //
+                .setTimeMillis(1).build();
         // validate event?
         return expected;
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
index f74f201..6707ee8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/PatternLayoutTest.java
@@ -112,8 +112,11 @@ public class PatternLayoutTest {
             ThreadContext.put("key1", "value1");
             ThreadContext.put("key2", "value2");
         }
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello")).build();
         final byte[] result = layout.toByteArray(event);
         assertEquals(expectedStr, new String(result));
     }
@@ -147,8 +150,11 @@ public class PatternLayoutTest {
     public void testRegex() throws Exception {
         final PatternLayout layout = PatternLayout.newBuilder().withPattern(regexPattern)
                 .withConfiguration(ctx.getConfiguration()).build();
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         final byte[] result = layout.toByteArray(event);
         assertEquals("org/apache/logging/log4j/core/layout/PatternLayoutTest Hello, world!", new String(result));
     }
@@ -157,8 +163,11 @@ public class PatternLayoutTest {
     public void testSpecialChars() throws Exception {
         final PatternLayout layout = PatternLayout.newBuilder().withPattern("\\\\%level\\t%msg\\n\\t%logger\\r\\n\\f")
                 .withConfiguration(ctx.getConfiguration()).build();
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         final byte[] result = layout.toByteArray(event);
         assertEquals("\\INFO\tHello, world!\n\torg.apache.logging.log4j.core.layout.PatternLayoutTest\r\n\f",
                 new String(result));
@@ -168,13 +177,19 @@ public class PatternLayoutTest {
     public void testUnixTime() throws Exception {
         final PatternLayout layout = PatternLayout.newBuilder().withPattern("%d{UNIX} %m")
                 .withConfiguration(ctx.getConfiguration()).build();
-        final LogEvent event1 = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world 1!"), null);
+        final LogEvent event1 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world 1!")).build();
         final byte[] result1 = layout.toByteArray(event1);
         assertEquals(event1.getTimeMillis() / 1000 + " Hello, world 1!", new String(result1));
         // System.out.println("event1=" + event1.getTimeMillis() / 1000);
-        final LogEvent event2 = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world 2!"), null);
+        final LogEvent event2 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world 2!")).build();
         final byte[] result2 = layout.toByteArray(event2);
         assertEquals(event2.getTimeMillis() / 1000 + " Hello, world 2!", new String(result2));
         // System.out.println("event2=" + event2.getTimeMillis() / 1000);
@@ -183,13 +198,19 @@ public class PatternLayoutTest {
     private void testUnixTime(final String pattern) throws Exception {
         final PatternLayout layout = PatternLayout.newBuilder().withPattern(pattern + " %m")
                 .withConfiguration(ctx.getConfiguration()).build();
-        final LogEvent event1 = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world 1!"), null);
+        final LogEvent event1 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world 1!")).build();
         final byte[] result1 = layout.toByteArray(event1);
         assertEquals(event1.getTimeMillis() + " Hello, world 1!", new String(result1));
         // System.out.println("event1=" + event1.getMillis());
-        final LogEvent event2 = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world 2!"), null);
+        final LogEvent event2 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world 2!")).build();
         final byte[] result2 = layout.toByteArray(event2);
         assertEquals(event2.getTimeMillis() + " Hello, world 2!", new String(result2));
         // System.out.println("event2=" + event2.getMillis());
@@ -199,13 +220,19 @@ public class PatternLayoutTest {
     public void testUnixTimeMillis() throws Exception {
         final PatternLayout layout = PatternLayout.newBuilder().withPattern("%d{UNIX_MILLIS} %m")
                 .withConfiguration(ctx.getConfiguration()).build();
-        final LogEvent event1 = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world 1!"), null);
+        final LogEvent event1 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world 1!")).build();
         final byte[] result1 = layout.toByteArray(event1);
         assertEquals(event1.getTimeMillis() + " Hello, world 1!", new String(result1));
         // System.out.println("event1=" + event1.getTimeMillis());
-        final LogEvent event2 = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world 2!"), null);
+        final LogEvent event2 = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName())
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world 2!")).build();
         final byte[] result2 = layout.toByteArray(event2);
         assertEquals(event2.getTimeMillis() + " Hello, world 2!", new String(result2));
         // System.out.println("event2=" + event2.getTimeMillis());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
index dd5c349..b7a2591 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
@@ -145,8 +145,13 @@ public class SerializedLayoutTest {
     public void testSerialization() throws Exception {
         final SerializedLayout layout = SerializedLayout.createLayout();
         final Throwable throwable = new LoggingException("Test");
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), null,
-            "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), throwable);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")) //
+                .setThrown(throwable) //
+                .build();
         final byte[] result = layout.toByteArray(event);
         assertNotNull(result);
         final FileOutputStream fos = new FileOutputStream(DAT_PATH);
@@ -160,8 +165,9 @@ public class SerializedLayoutTest {
         testSerialization();
         final File file = new File(DAT_PATH);
         final FileInputStream fis = new FileInputStream(file);
-        final ObjectInputStream ois = new ObjectInputStream(fis);
-        final LogEvent event = (LogEvent) ois.readObject();
-        assertNotNull(event);
+        try (final ObjectInputStream ois = new ObjectInputStream(fis) ) {
+            final LogEvent event = (LogEvent) ois.readObject();
+            assertNotNull(event);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/XmlLayoutTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/XmlLayoutTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/XmlLayoutTest.java
index cfaa99b..d5c83ca 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/XmlLayoutTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/layout/XmlLayoutTest.java
@@ -253,8 +253,13 @@ public class XmlLayoutTest {
     @Test
     public void testLayoutLoggerName() {
         final XmlLayout layout = XmlLayout.createLayout(false, true, true, false, null);
-        final Log4jLogEvent event = Log4jLogEvent.createEvent("a.B", null, "f.q.c.n", Level.DEBUG, 
-                new SimpleMessage("M"), null, null, null, null, "threadName", null, 1);
+        final Log4jLogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName("a.B") //
+                .setLoggerFqcn("f.q.c.n") //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("M")) //
+                .setThreadName("threadName") //
+                .setTimeMillis(1).build();
         final String str = layout.toSerializable(event);
         assertTrue(str, str.contains("loggerName=\"a.B\""));
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupTest.java
index a33ed3d..d26f895 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/MarkerLookupTest.java
@@ -41,16 +41,23 @@ public class MarkerLookupTest {
     @Test
     public void testLookupEventExistant() {
         final Marker marker = MarkerManager.getMarker(markerName);
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), marker,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setMarker(marker) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         final String value = strLookup.lookup(event, marker.getName());
         assertEquals(markerName, value);
     }
 
     @Test
     public void testLookupEventNonExistant() {
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), null,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         final String value = strLookup.lookup(event, ABSENT_MARKER_NAME);
         assertNull(value);
     }
@@ -58,8 +65,12 @@ public class MarkerLookupTest {
     @Test
     public void testLookupEventNonExistantKey() {
         final Marker marker = MarkerManager.getMarker(markerName);
-        final LogEvent event = new Log4jLogEvent(this.getClass().getName(), marker,
-                "org.apache.logging.log4j.core.Logger", Level.INFO, new SimpleMessage("Hello, world!"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(this.getClass().getName()) //
+                .setMarker(marker) //
+                .setLoggerFqcn("org.apache.logging.log4j.core.Logger") //
+                .setLevel(Level.INFO) //
+                .setMessage(new SimpleMessage("Hello, world!")).build();
         final String value = strLookup.lookup(event, ABSENT_MARKER_NAME);
         assertEquals(markerName, value);
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/StructuredDataLookupTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/StructuredDataLookupTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/StructuredDataLookupTest.java
index d16eaa3..09081dd 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/StructuredDataLookupTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/lookup/StructuredDataLookupTest.java
@@ -36,7 +36,7 @@ public class StructuredDataLookupTest {
     @Test
     public void testLookup() {
         final Message msg = new StructuredDataMessage("Test", "This is a test", "Audit");
-        final LogEvent event = new Log4jLogEvent(null, null, null, Level.DEBUG, msg, null);
+        final LogEvent event = Log4jLogEvent.newBuilder().setLevel(Level.DEBUG).setMessage(msg).build();
         final StrLookup lookup = new StructuredDataLookup();
         String value = lookup.lookup(event, TESTKEY);
         assertEquals(TESTVAL, value);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
index be1e2ad..86c9b84 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
@@ -33,8 +33,11 @@ public class EncodingPatternConverterTest {
 
     @Test
     public void testReplacement() {
-        final LogEvent event = new Log4jLogEvent(EncodingPatternConverterTest.class.getName(), null, null, Level.DEBUG,
-            new SimpleMessage("Test \r\n<div class=\"test\">this</div> & <div class='test'>that</div>"), null);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName(EncodingPatternConverterTest.class.getName()) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("Test \r\n<div class=\"test\">this</div> & <div class='test'>that</div>"))
+                .build();
         final StringBuilder sb = new StringBuilder();
         final LoggerContext ctx = (LoggerContext) LogManager.getContext();
         final String[] options = new String[]{"%msg"};

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/14e27b4b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
index 8d0a528..8dfb2f5 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java
@@ -41,8 +41,14 @@ public class ExtendedThrowablePatternConverterTest {
 		final Throwable originalThrowable = new Exception("something bad happened");
 		final ThrowableProxy throwableProxy = new ThrowableProxy(originalThrowable);
 		final Throwable deserializedThrowable = null;
-		final LogEvent event = Log4jLogEvent.createEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
-				new SimpleMessage(""), deserializedThrowable, throwableProxy, null, null, null, null, 0);
+        final Log4jLogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName("testLogger") //
+                .setLoggerFqcn(this.getClass().getName()) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("")) //
+                .setThrown(deserializedThrowable) //
+                .setThrownProxy(throwableProxy) //
+                .setTimeMillis(0).build();
 		final StringBuilder sb = new StringBuilder();
 		converter.format(event, sb);
 		final String result = sb.toString();
@@ -57,8 +63,12 @@ public class ExtendedThrowablePatternConverterTest {
         final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(options);
         final Throwable cause = new NullPointerException("null pointer");
         final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
-        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
-            new SimpleMessage("test exception"), parent);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName("testLogger") //
+                .setLoggerFqcn(this.getClass().getName()) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("test exception")) //
+                .setThrown(parent).build();
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final String result = sb.toString();
@@ -70,8 +80,12 @@ public class ExtendedThrowablePatternConverterTest {
         final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null);
         final Throwable cause = new NullPointerException("null pointer");
         final Throwable parent = new IllegalArgumentException("IllegalArgument", cause);
-        final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG,
-            new SimpleMessage("test exception"), parent);
+        final LogEvent event = Log4jLogEvent.newBuilder() //
+                .setLoggerName("testLogger") //
+                .setLoggerFqcn(this.getClass().getName()) //
+                .setLevel(Level.DEBUG) //
+                .setMessage(new SimpleMessage("test exception")) //
+                .setThrown(parent).build();
         final StringBuilder sb = new StringBuilder();
         converter.format(event, sb);
         final StringWriter sw = new StringWriter();