You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2012/09/17 08:25:38 UTC
svn commit: r1386485 -
/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsynchAppender.java
Author: rgoers
Date: Mon Sep 17 06:25:38 2012
New Revision: 1386485
URL: http://svn.apache.org/viewvc?rev=1386485&view=rev
Log:
Improve error handling
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsynchAppender.java
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsynchAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsynchAppender.java?rev=1386485&r1=1386484&r2=1386485&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsynchAppender.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/AsynchAppender.java Mon Sep 17 06:25:38 2012
@@ -54,6 +54,7 @@ public final class AsynchAppender extend
private AsynchThread thread = null;
private static final int DEFAULT_QUEUE_SIZE = 128;
+ private static final String SHUTDOWN = "Shutdown";
private AsynchAppender(String name, Filter filter, AppenderRef[] appenderRefs, String errorRef,
int queueSize, boolean blocking,
@@ -183,13 +184,33 @@ public final class AsynchAppender extend
public void run() {
while (!shutdown) {
+ Serializable s;
try {
- Log4jLogEvent event = Log4jLogEvent.deserialize(queue.take());
- for (AppenderControl control : appenders) {
- control.callAppender(event);
+ s = queue.take();
+ if (s != null && s instanceof String && SHUTDOWN.equals(s.toString())) {
+ shutdown = true;
+ continue;
}
} catch (InterruptedException ex) {
- // May have been interrupted to shut down.
+ // No good reason for this.
+ continue;
+ }
+ Log4jLogEvent event = Log4jLogEvent.deserialize(s);
+ boolean success = false;
+ for (AppenderControl control : appenders) {
+ try {
+ control.callAppender(event);
+ success = true;
+ } catch (Exception ex) {
+ // If no appender is successful the error appender will get it.
+ }
+ }
+ if (!success && errorAppender != null) {
+ try {
+ errorAppender.callAppender(event);
+ } catch (Exception ex) {
+ // Silently accept the error.
+ }
}
}
// Process any remaining items in the queue.
@@ -207,7 +228,9 @@ public final class AsynchAppender extend
public void shutdown() {
shutdown = true;
- this.interrupt();
+ if (queue.isEmpty()) {
+ queue.offer(SHUTDOWN);
+ }
}
}
}