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 2016/03/26 06:03:11 UTC

[2/4] logging-log4j2 git commit: LOG4J2-1324 Update Disruptor setup logic to use the new exception handlers.

LOG4J2-1324 Update Disruptor setup logic to use the  new exception handlers.


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

Branch: refs/heads/master
Commit: 4bb7d6d03e66c80c76f0d328fefbc7f7195d7f4e
Parents: cf2de96
Author: rpopma <rp...@apache.org>
Authored: Sat Mar 26 14:01:39 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Mar 26 14:01:39 2016 +0900

----------------------------------------------------------------------
 .../core/async/AsyncLoggerConfigDisruptor.java  | 10 +++++--
 .../log4j/core/async/AsyncLoggerDisruptor.java  |  3 +-
 .../logging/log4j/core/async/DisruptorUtil.java | 30 +++++++++++++++-----
 3 files changed, 31 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4bb7d6d0/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
index 20abda8..8f5cec7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigDisruptor.java
@@ -63,7 +63,7 @@ public class AsyncLoggerConfigDisruptor implements AsyncLoggerConfigDelegate {
     /**
      * RingBuffer events contain all information necessary to perform the work in a separate thread.
      */
-    private static class Log4jEventWrapper {
+    public static class Log4jEventWrapper {
         private AsyncLoggerConfig loggerConfig;
         private LogEvent event;
 
@@ -74,6 +74,11 @@ public class AsyncLoggerConfigDisruptor implements AsyncLoggerConfigDelegate {
             loggerConfig = null;
             event = null;
         }
+
+        @Override
+        public String toString() {
+            return String.valueOf(event);
+        }
     }
 
     /**
@@ -166,8 +171,7 @@ public class AsyncLoggerConfigDisruptor implements AsyncLoggerConfigDelegate {
 
         disruptor = new Disruptor<>(FACTORY, ringBufferSize, executor, ProducerType.MULTI, waitStrategy);
 
-        final ExceptionHandler<Log4jEventWrapper> errorHandler = DisruptorUtil.getExceptionHandler(
-                "AsyncLoggerConfig.ExceptionHandler", Log4jEventWrapper.class);
+        final ExceptionHandler<Log4jEventWrapper> errorHandler = DisruptorUtil.getAsyncLoggerConfigExceptionHandler();
         disruptor.handleExceptionsWith(errorHandler);
 
         final Log4jEventWrapperHandler[] handlers = {new Log4jEventWrapperHandler()};

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4bb7d6d0/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java
index 1e1cd1e..1bc7710 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/AsyncLoggerDisruptor.java
@@ -88,8 +88,7 @@ class AsyncLoggerDisruptor {
         disruptor = new Disruptor<>(RingBufferLogEvent.FACTORY, ringBufferSize, executor, ProducerType.MULTI,
                 waitStrategy);
 
-        final ExceptionHandler<RingBufferLogEvent> errorHandler = DisruptorUtil.getExceptionHandler(
-                "AsyncLogger.ExceptionHandler", RingBufferLogEvent.class);
+        final ExceptionHandler<RingBufferLogEvent> errorHandler = DisruptorUtil.getAsyncLoggerExceptionHandler();
         disruptor.handleExceptionsWith(errorHandler);
 
         final RingBufferLogEventHandler[] handlers = {new RingBufferLogEventHandler()};

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4bb7d6d0/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
index 8d368fe..c4083a4 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
@@ -89,19 +89,35 @@ final class DisruptorUtil {
         return Integers.ceilingNextPowerOfTwo(ringBufferSize);
     }
 
-    static <T> ExceptionHandler<T> getExceptionHandler(final String propertyName, Class<T> type) {
-        final String cls = PropertiesUtil.getProperties().getStringProperty(propertyName);
+    static ExceptionHandler<RingBufferLogEvent> getAsyncLoggerExceptionHandler() {
+        final String cls = PropertiesUtil.getProperties().getStringProperty("AsyncLogger.ExceptionHandler");
         if (cls == null) {
-            return null;
+            return new DefaultAsyncLoggerExceptionHandler();
         }
         try {
             @SuppressWarnings("unchecked")
-            final Class<? extends ExceptionHandler<T>> klass =
-                (Class<? extends ExceptionHandler<T>>) LoaderUtil.loadClass(cls);
+            final Class<? extends ExceptionHandler<RingBufferLogEvent>> klass =
+                (Class<? extends ExceptionHandler<RingBufferLogEvent>>) LoaderUtil.loadClass(cls);
             return klass.newInstance();
         } catch (final Exception ignored) {
-            LOGGER.debug("Invalid {} value: error creating {}: ", propertyName, cls, ignored);
-            return null;
+            LOGGER.debug("Invalid AsyncLogger.ExceptionHandler value: error creating {}: ", cls, ignored);
+            return new DefaultAsyncLoggerExceptionHandler();
+        }
+    }
+
+    static ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper> getAsyncLoggerConfigExceptionHandler() {
+        final String cls = PropertiesUtil.getProperties().getStringProperty("AsyncLoggerConfig.ExceptionHandler");
+        if (cls == null) {
+            return new DefaultAsyncLoggerConfigExceptionHandler();
+        }
+        try {
+            @SuppressWarnings("unchecked")
+            final Class<? extends ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>> klass =
+                    (Class<? extends ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>>) LoaderUtil.loadClass(cls);
+            return klass.newInstance();
+        } catch (final Exception ignored) {
+            LOGGER.debug("Invalid AsyncLoggerConfig.ExceptionHandler value: error creating {}: ", cls, ignored);
+            return new DefaultAsyncLoggerConfigExceptionHandler();
         }
     }