Author: rgoers
Date: Sun Oct 24 17:54:50 2010
New Revision: 1026847
URL: http://svn.apache.org/viewvc?rev=1026847&view=rev
Log:
Prevent recursive appender calls
Modified:
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
Modified:
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
URL:
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java?rev=1026847&r1=1026846&r2=1026847&view=diff
==============================================================================
---
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
(original)
+++
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
Sun Oct 24 17:54:50 2010
@@ -24,10 +24,12 @@ import org.apache.logging.log4j.core.app
import org.apache.logging.log4j.core.appender.DefaultErrorHandler;
/**
- *
+ * Wraps appenders with details the appender implementation shouldn't need to
know about.
*/
public class AppenderControl {
+ private ThreadLocal<AppenderControl> recursive = new
ThreadLocal<AppenderControl>();
+
private final Appender appender;
AppenderControl(Appender appender) {
@@ -39,33 +41,43 @@ public class AppenderControl {
}
public void callAppender(LogEvent event) {
- if (!appender.isStarted()) {
- appender.getHandler().error("Attempted to append to non-started
appender " + appender.getName());
+ if (recursive.get() != null) {
+ appender.getHandler().error("Recursive call to appender " +
appender.getName());
+ return;
+ }
+ try {
+ recursive.set(this);
+
+ if (!appender.isStarted()) {
+ appender.getHandler().error("Attempted to append to
non-started appender " + appender.getName());
- if (!appender.suppressException()) {
- throw new AppenderRuntimeException("Attempted to append to
non-started appender " + appender.getName());
+ if (!appender.suppressException()) {
+ throw new AppenderRuntimeException("Attempted to append to
non-started appender " + appender.getName());
+ }
}
- }
- Filter.Result result = Filter.Result.NEUTRAL;
+ Filter.Result result = Filter.Result.NEUTRAL;
- for (Filter filter : appender.getFilters()) {
- result = filter.filter(event);
- if (result != Filter.Result.NEUTRAL) {
- break;
+ for (Filter filter : appender.getFilters()) {
+ result = filter.filter(event);
+ if (result != Filter.Result.NEUTRAL) {
+ break;
+ }
+ }
+ if (result == Filter.Result.DENY) {
+ return;
}
- }
- if (result == Filter.Result.DENY) {
- return;
- }
- try {
- appender.append(event);
- } catch (Exception ex) {
- appender.getHandler().error("An exception occurred processing
Appender " + appender.getName(), ex);
- if (!appender.suppressException()) {
- throw new AppenderRuntimeException(ex);
+ try {
+ appender.append(event);
+ } catch (Exception ex) {
+ appender.getHandler().error("An exception occurred processing
Appender " + appender.getName(), ex);
+ if (!appender.suppressException()) {
+ throw new AppenderRuntimeException(ex);
+ }
}
+ } finally {
+ recursive.set(null);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]