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();
}
}